我发现这是一种在一个语句中分配regex
捕获的方法:
$str1 = "Hello World";
($str2) = $str1 =~ m[(.+?)World];
print $str2 . "\n"; # output is "Hello "
为什么$str2
周围的方括号必须?
答案 0 :(得分:1)
Perl很奇怪,可以编写函数(在内部使用正则表达式)来理解需要返回的内容。
使用时:
$str2 = $str1 =~ m[(.+?)World];
正则表达式函数可以看到您想要返回标量值,因此如果匹配则分配1
的值,如果不匹配则分配0
(perl没有true
的常量和{{ 1}})。但是当你添加括号时,函数知道你想要一个数组,你只需立即将数组的单个元素分配回标量值。
如果你这样做也会有用
false
在这种情况下,您可以使用@str2 = $str1 =~ m[(.+?)World];
如果您想根据自己的功能中的上下文返回,可以使用$str2[0]
关键字。
答案 1 :(得分:1)
尝试以下方法:
use feature qw( say );
my @a = qw( a b c );
my $x = @a;
my ($y) = @a;
say $x; # This outputs 3
say $y; # This outputs a
使赋值运算符的LHS看起来像#34; listy"影响评估赋值运算符的RHS的上下文。
因此,parens会影响评估正则表达式匹配运算符的上下文。
if (/pat/)
。my @matches = /pat/
。