我发现在某些情况下,正则表达式匹配的返回值为True,而其他时候是()
中的返回值例如,我发现所有文本都是分号:
my $blop = "some;different;fields";
if(some expression)
{
my $blip = $blop =~ /([^;]+)/;
}
我预计$ blip eq“some”,但检查中的返回值是1(或TRUE)。
$ 1包含我想要的结果,所以我可以写:
$blop =~ /([^;]+)/;
my $blip = $1;
但那效率低下。我相信在其他情况下,返回是括号内的结果,这里有什么不同?
答案 0 :(得分:9)
如果给出正则表达式列表上下文,它将返回列表中的捕获:
use strict;
use warnings;
my $blop = "some;different;fields";
my($blip) = $blop =~ /([^;]+)/;
print "$blip\n";
print "$1\n";
打印出一些'两次。
在标量上下文中,如果匹配则正则表达式返回true,否则返回false(这就是为什么你可以在条件中使用它们)。将这两行添加到上面的代码中:
my $blup = $blop =~ /([^;]+);([^;]+)/;
print "$blup : $1 : $2\n";
并打印额外代码:
1 : some : different