Perl开关语句中使用Reg表达式的问题
Perl版本:5.8使用ActivePerl。Perl开关语句中使用Reg表达式的问题
我试图插入reg表达式作为perl中switch语句的单独条件,但失败了。
你能告诉我更多关于如何解决?
我抬头看每个文档,找不到这种例子。谢谢。
while (my $line =<$fh>) { # change foreach to while switch ($line) {
case ($line =~ m/\<IDCateA\sName="(\w+)\"\sid="(\w+)\"\s/) {print " $1 = $2,\n";}
case ($line =~ m/\<IDCateB\sName="(\w+)\"\sid="(\w+)\"\s/) {print " $1 = $2,\n";}
}
my $nextline = <$fh>;
}
的数据,因为这的一部分,
<IDCateA Name="SystemAlpha" id="0" units="" min="0" max="8" default="0" value="3"/> <IDCateB Name="SystemBeta" id="1" units="" min="0" max="2" default="0" value="0"/>
回答:
避免使用Switch.pm;它使用脆弱技术实施。 我相信它在Switch模块内的范围内执行正则表达式,使得$ 1等在您的代码中不可用(在删除不属于那里的$line =~
之后)。您的键盘示例缺失use Switch
。我也无法让Switch与__DATA__
合作。
perldoc -q switch
显示了多种方法有一个类似开关的声明,如果你不能使用5.10.1的给定/时的语法,比如:
use strict; use warnings;
while (my $line = <DATA>) {
for ($line) {
if (/<IDCateA\sName="(\w+)"\sid="(\w+)"\s/) {print " $1 = $2,\n"}
elsif (/<IDCateB\sName="(\w+)"\sid="(\w+)"\s/) {print " $1 = $2,\n"}
}
}
__DATA__
<IDCateA Name="SystemAlpha" id="0" units="" min="0" max="8" default="0" value="3"/>
<IDCateB Name="SystemBeta" id="1" units="" min="0" max="2" default="0" value="0"/>
回答:
您应该使用given
或foreach
与when
从5.10或更好,而不是旧的过时Switch.pm
模块。
以上是 Perl开关语句中使用Reg表达式的问题 的全部内容, 来源链接: utcz.com/qa/263327.html