考慮
my @array = ( 'x' =~ /y/, 'x' eq 'y', 1 == 2 );
和
my %hash = ( 'a', 'x' =~ /y/, 'b', 'x' eq 'y', 'c', 1 == 2 );
使用Data::Dumper,我們看到它的=~行為不同于eq和==
\@array = [
'',
''
];
\%hash = {
'a' => 'b',
'' => undef
};
具體來說,上面的代碼片段似乎被解釋為
my @array = ( 'x' eq 'y', 1 == 2 );
和
my %hash = ( 'a', 'b', 'x' eq 'y', 'c', 1 == 2 );
有人可以為這種可以說是出乎意料的行為提供解釋嗎?
uj5u.com熱心網友回復:
您使用的匹配操作不僅是要找出是否匹配(標量背景關系),而且還要給出匹配結果(串列背景關系)。從檔案中參考:
在串列背景關系中匹配
m// 在串列背景關系中回傳一個由模式中括號匹配的子運算式組成的串列,即 ($1, $2, $3...)(注意這里還設定了 $1 等)。當模式中沒有括號時,回傳值是成功的串列(1)。有或沒有括號,失敗時回傳一個空串列
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443079.html
