除非在perl中定义,否则为数组赋值

时间:2017-04-18 19:43:33

标签: perl

我们有一个代码:

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');

2 个答案:

答案 0 :(得分:4)

  

除非定义了

,否则将值赋给数组

没有定义或未定义的数组。

如果数组为空,则分配给数组

@arr = 'def' if !@arr;
  

如果此处没有@ARGV,则存在一些为数组指定默认值的缩短方法吗?

@ARGV始终存在。

要将数组复制到另一个数组,如果源数组为空,则使用备用值,您可以使用以下命令:

my @arr = @ARGV ? @ARGV : 'def';

答案 1 :(得分:3)

简单

my @arr = @ARGV ? @ARGV : ('def');

如果确实只有一个要分配的值,则可以省略括号。

最后一个例子不起作用,因为//||&&评估了他们左手边的定义或真实性,因此他们强加了一个标量背景他们的左手边(将数组强制转换为其元素的数量)。请参阅it in perlop