有人可以向新手解释以下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 ="部分也是?
答案 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+)/ ) {
...
}
效率更高,避免了代码重复。