Perl上下文 - 为什么返回值与$ 1不一样?

时间:2014-08-06 07:07:56

标签: regex perl

我发现在某些情况下,正则表达式匹配的返回值为True,而其他时候是()

中的返回值

例如,我发现所有文本都是分号:

my $blop = "some;different;fields";
if(some expression)
{
    my $blip = $blop =~ /([^;]+)/;
}

我预计$ blip eq“some”,但检查中的返回值是1(或TRUE)。

$ 1包含我想要的结果,所以我可以写:

$blop =~ /([^;]+)/;
my $blip = $1;

但那效率低下。我相信在其他情况下,返回是括号内的结果,这里有什么不同?

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