リスト代入とスカラー代入の 2 つの代入演算子があります。選択は、「 」の LHS に基づいて決定され=
ます。(2 つの演算子については、ここで詳しく説明します。)
この場合、リスト代入演算子が使用されます。リスト代入演算子は、両方のオペランドをリスト コンテキストで評価します。
では$_=~ /^>(.*)/
、リスト コンテキストで は何をするのでしょうか? パーロップを引用:
/g
オプションが使用されていない場合、m//
リスト コンテキストでは、パターン内の括弧に一致する部分式 ( $1
、$2
、$3
...) で構成されるリストを返します [...] パターン内に括弧がない場合、戻り値値は(1)
成功のリストです。括弧の有無にかかわらず、失敗すると空のリストが返されます。
言い換えると、
my ($match) = $_ =~ /^>(.*)/;
と同等です
my $match;
if ($_ =~ /^>(.*)/) {
$match = $1;
} else {
$match = undef;
}
括弧が省略された場合 ( my $tmp = ...;
)、代わりにスカラー代入が使用されます。スカラー代入演算子は、両方のオペランドをスカラー コンテキストで評価します。
$_=~ /^>(.*)/
では、スカラー コンテキストで何を行うのでしょうか。パーロップを引用:
成功した場合は 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.
}