2017-04-18 60 views
1

設定義有代碼:值分配給陣列,除非在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'); 

回答

3

簡單

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

,您可以省略如果確實只有一個值需要分配,則可以使用括號。

這最後的例子不工作,因爲//||,並且&&評估definedness或他們的左手側的道理,所以他們強加給自己的左手側的標量上下文(coerceing的數組的計數其元素)。見it in perlop

+0

@ikegami啊,謝謝。只是編輯試圖修復它 - 這是更好的 – zdim

+0

啊......謝謝。 :) – kobame

3

將值分配給陣列除非定義

有作爲定義或未定義陣列這樣的東西。

要分配給數組,如果它是

@arr = 'def' if [email protected]; 

存在着默認值分配到數組,如果在這裏沒有@ARGV一些縮短呢?

@ARGV始終存在。

要複製的陣列到另一個,使用替代值如果源陣列是,可以使用以下內容:

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