关于 Perl switch 语句中使用的 Reg 表达式的问题
Perl 版本:5.8 使用 ActivePerl。
我尝试在 Perl 中插入 reg 表达式作为 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"/>
Perl Version: 5.8 ActivePerl used.
I tried to insert reg expressions as individual conditions for switch statement in Perl, but failed.
Could you tell me more about how to fix?
I looked up per doc and can't find this kind of example. Thanks.
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>;
}
A part of the data as this,
<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"/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
避免使用 Switch.pm;它是使用脆性技术实现的。
我相信它在 Switch 模块内的范围内执行正则表达式,因此 $1 等在您的代码中不可用(在删除不属于那里的
$line =~
之后) 。您的键盘示例缺少
use Switch
。我也很难让 Switch 与 __DATA__ 合作。perldoc -q switch
显示了如果您无法使用 5.10.1 的给定/当语法时使用类似 switch 的语句的多种方法,例如:Avoid using Switch.pm; it is implemented using brittle technology.
I believe that it executes regular expressions in a scope inside the Switch module such that $1, etc., aren't available in your code (after removing the
$line =~
that don't belong there).Your codepad example is missing
use Switch
. I had trouble getting Switch to cooperate with__DATA__
, too.perldoc -q switch
shows a number of ways to have a switch-like statement if you can't use 5.10.1's given/when syntax, for instance:从 5.10 或更高版本开始,您应该将
given
或foreach
与when
一起使用,而不是旧的已弃用的Switch.pm
模块。You should be using
given
orforeach
withwhen
from 5.10 or better, not the old deprecatedSwitch.pm
module.