考虑以下代码:
@tmp = split(/\s+/, "apple banana cherry");
$aref = \@tmp;
除了不优雅外,上述代码还很脆弱。说我用这一行跟着它:
@tmp = split(/\s+/, "dumpling eclair fudge");
现在$$aref[1]
是“eclair”而不是“banana”。
如何避免使用临时变量?
从概念上讲,我正在考虑像
这样的东西$aref = \@{split(/\s+/, "apple banana cherry")};
答案 0 :(得分:19)
如果你想要一个array-ref:
,你可以这样做my $aref = [ split(/\s+/, "apple banana cherry") ];
答案 1 :(得分:3)
我明白了:
$aref = [split(/\s+/, "apple banana cherry")];
答案 2 :(得分:2)
虽然我喜欢mu的答案(并且会先在这里使用这种方法),但请记住,即使不使用函数,变量也可以很容易确定范围,想象一下:
my $aref = do {
my @temp = split(/\s+/, "apple banana cherry");
\@temp;
};
print join("-", @$aref), "\n";
# with warnings: Name "main::temp" used only once: possible typo at ...
# with strict: Global symbol "@temp" requires explicit package name at ...
print join("-", @temp), "\n";
快乐的编码。