/:$foovar/ 这在 Perl 中起什么作用?

Ble*_*eek 3 regex perl

我正在查看 Perl 脚本来了解它的作用。

我遇到了这个

if (/:$array[k]/)
Run Code Online (Sandbox Code Playgroud)

/:$something/Perl是做什么的?

Ted*_*gmo 6

这是一个正则表达式,与 匹配$_。具体来说,$这里不将 视为正则表达式特殊字符,而是开始表达式求值(表达式是$array[k]。因此它匹配:后跟 中的任何内容$array[k]$array[k]不过看起来是错误的。它可能应该是$array[$k]

例子:

#!/bin/perl

my @array=qw(foo bar baz);

$_ = 'XXX:barXXX';
my $k = 1;

if (/:$array[$k]/) {  # :$array[$k] is ":bar"
    print "Match\n";  # prints Match because :bar is found in $_
}
Run Code Online (Sandbox Code Playgroud)

注意:如果 中的元素array不应像原始示例中那样被解释为模式regex,则需要引用$array[$k]with \Q...的插值\E

if (/:\Q$array[$k]\E/)
Run Code Online (Sandbox Code Playgroud)

\E在上面的例子中可以省略,因为我们希望后面的所有内容都\Q按字面匹配。