有两种赋值运算符:列表赋值和标量赋值。选择是根据“ =
”的 LHS 确定的。(这里详细介绍了这两个运算符。)
在这种情况下,使用列表赋值运算符。列表赋值运算符在列表上下文中计算其两个操作数。
那么$_=~ /^>(.*)/
在列表上下文中做什么呢?引用perlop:
如果/g
未使用该选项,则m//
在列表上下文中返回由模式中括号匹配的子表达式组成的列表,即 ( $1
, $2
, $3
...) [...] 当模式中没有括号时,返回价值是(1)
成功的清单。有或没有括号,失败时返回一个空列表。
换句话说,
my ($match) = $_ =~ /^>(.*)/;
相当于
my $match;
if ($_ =~ /^>(.*)/) {
$match = $1;
} else {
$match = undef;
}
如果省略括号 ( my $tmp = ...;
),则将使用标量赋值。标量赋值运算符在标量上下文中计算其两个操作数。
那么$_=~ /^>(.*)/
在标量上下文中做什么呢?引用perlop:
如果成功则返回 true,如果失败则返回 false。
换句话说,
my $matched = $_ =~ /^>(.*)/;
相当于
my $matched;
if ($_ =~ /^>(.*)/) {
$matched = 1; # !!1 if you want to be picky.
} else {
$matched = 0; # !!0 if you want to be picky.
}