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"/>

回答:

您应该使用givenforeachwhen从5.10或更好,而不是旧的过时Switch.pm模块。

以上是 Perl开关语句中使用Reg表达式的问题 的全部内容, 来源链接: utcz.com/qa/263327.html

回到顶部