Regex 关于Perl switch语句中使用的Reg表达式的问题

Regex 关于Perl switch语句中使用的Reg表达式的问题,regex,perl,switch-statement,Regex,Perl,Switch Statement,Perl版本:使用5.8 ActivePerl 我尝试在Perl中插入reg表达式作为switch语句的单独条件,但失败了 你能告诉我更多关于如何修复的信息吗 我查阅了per doc,但找不到此类示例。谢谢 while (my $line =<$fh>) { # change foreach to while switch ($line) { case ($line =~ m/\<IDCateA\sName="(\w+)\"\sid="(\w+)\"\s

Perl版本:使用5.8 ActivePerl

我尝试在Perl中插入reg表达式作为switch语句的单独条件,但失败了

你能告诉我更多关于如何修复的信息吗

我查阅了per doc,但找不到此类示例。谢谢

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>;
}
while(my$line=){#将foreach更改为while
交换机($line){

案例($line=~m/\当
从5.10或更高版本开始时,您应该将
given
foreach
一起使用,而不是旧的弃用
Switch.pm
模块。

从5.10或更高版本开始时,您应该将
given
foreach
一起使用,而不是旧的弃用
Switch.pm
模块。

<>避免使用Switch.pm;它是使用脆性技术实现的。 我相信它在Switch模块内的作用域中执行正则表达式,这样$1等在代码中就不可用了(在删除不属于那里的
$line=~
之后)

您的代码板示例缺少
使用开关
。我也很难让开关与
\uuuu数据
配合

perldoc-q switch
展示了在无法使用5.10.1的给定/when语法时使用类似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"/>
使用严格;
使用警告;
while(我的$line=){
用于($行){

如果(/避免使用Switch.pm;它是使用脆性技术实现的。 我相信它在Switch模块内的作用域中执行正则表达式,这样$1等在代码中就不可用了(在删除不属于那里的
$line=~
之后)

您的代码板示例缺少
使用开关
。我也很难让开关与
\uuuu数据
配合

perldoc-q switch
展示了在无法使用5.10.1的给定/when语法时使用类似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"/>
使用严格;
使用警告;
while(我的$line=){
用于($行){

如果(/@Nano:我想你会从
案例
部分删除那些
$line=~
,因为应该对你正在打开的任何东西进行匹配。我按照你的指南进行了测试,但不起作用。语法错误。请参阅codepad@Nano:我想你会从
案例
部分删除那些
$line=~
,因为应该对您正在打开的任何设备进行匹配。我按照您的指南进行了测试,但不起作用。语法错误。请参阅代码板