Perl版本:5.8使用ActivePerl。
我试图将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"/>
答案 0 :(得分:4)
您应该使用given
或foreach
与{0}或更好的when
,而不是旧的已弃用的Switch.pm
模块。
答案 1 :(得分:4)
避免使用Switch.pm;它是使用脆弱技术实现的。
我相信它在Switch模块内的一个范围内执行正则表达式,这样你的代码中就没有$ 1等等(在删除不属于那里的$line =~
之后)。
您的键盘示例缺少use Switch
。我也很难让Switch与__DATA__
合作。
perldoc -q switch
会显示多种方法来获得类似开关的语句,例如:
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"/>