我有一個函數,這取決於調用上下文,我想用這個函數作爲其他函數的參數。令人驚訝的是,我發現這個second
函數現在在列表環境中被調用。我試圖用+()
強制標量上下文,但它不起作用,因爲我預期。所以唯一的方法是用scalar
隱含地稱呼它。爲什麼函數參數會引發列表上下文?
use 5.010;
say first(1, second('y'));
say first(1, +(second('y')));
say first(1, scalar second('y'));
sub first {
my $x = shift;
my $y = shift;
return "$x + $y";
}
sub second {
my $y = shift;
if (wantarray) {
qw/ array array /;
} else {
'scalar';
}
}
__END__
1 + array
1 + array
1 + scalar
函數的參數被視爲列表,但這是否意味着該列表中的每個參數都意味着列表上下文?如果是,那爲什麼?
而且,使用scalar
的作品,但是我有哪些其他方法需要在標量上下文中調用這個函數(沒有中間變量)?
添加到我的答案。 – ikegami
當然,列表中的每個成員也可能是列表,所以沒有太多選擇。沒想過。謝謝! –