从Perl中的绑定运算符分配另一个变量

时间:2014-12-17 03:54:37

标签: regex perl

有人可以向新手解释以下perl片段吗?

my @array = qw/username=admin username=root/; 

foreach my $string (@array) { 
    if ($string =~ /username/) { 
        my ($nextString) = $string =~ /username=(\w+)/; 
        print "It worked, \$nextString is $nextString\n"; 
    } 
}   

我理解大部分代码,但这部分令我困惑:

my ($nextString) = $string =~ /username=(\w+)/; 

它返回字符串" admin"和" root"。为什么不返回" username ="部分也是?

1 个答案:

答案 0 :(得分:1)

因为你告诉它要抓住"字"在username=之后。列表上下文中的匹配运算符返回捕获(())捕获的字符串。如果您想要返回username=admin,请使用

my ($nextString) = $string =~ /(username=\w+)/; 

顺便说一下,没有理由两次匹配。而不是

if ($string =~ /username=\w+/) { 
    my ($nextString) = $string =~ /username=(\w+)/; 
    ...
}

使用

if ( my ($nextString) = $string =~ /username=(\w+)/ ) { 
    ...
}

效率更高,避免了代码重复。