我们有一个代码:
use 5.014;
use warnings;
my $def = 'default_value';
# this works,.
# e.g. unless here are some arguments
# assigns to element0 the value $def
my(@arr) = (@ARGV);
push @arr, $def unless @arr;
say "args: @arr";
# this also works
# same for scalar - ARGV[0]
my $a1 = $ARGV[0] // $def;
say "arg1: $a1";
如果没有@ARGV
?
#this not works
#my(@arr) = (@ARGV) // ('def');
答案 0 :(得分:4)
除非定义了
,否则将值赋给数组
没有定义或未定义的数组。
如果数组为空,则分配给数组
@arr = 'def' if !@arr;
如果此处没有
@ARGV
,则存在一些为数组指定默认值的缩短方法吗?
@ARGV
始终存在。
要将数组复制到另一个数组,如果源数组为空,则使用备用值,您可以使用以下命令:
my @arr = @ARGV ? @ARGV : 'def';
答案 1 :(得分:3)
简单
my @arr = @ARGV ? @ARGV : ('def');
如果确实只有一个要分配的值,则可以省略括号。
最后一个例子不起作用,因为//
,||
和&&
评估了他们左手边的定义或真实性,因此他们强加了一个标量背景他们的左手边(将数组强制转换为其元素的数量)。请参阅it in perlop。