2017-04-18 16 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'); 

実際に割り当てる値が1つしかない場合は括弧で囲みます。の数に配列をcoerceing(//||、および&&はその左側の定義済みか、または真実を評価するので、彼らは彼らの左側にスカラーコンテキストを課すので、最後の例は動作しません

その要素)。 it in perlopを参照してください。

+0

@ikegamiああ、ありがとう。ちょうどそれを修正しようと編集していた - これは良いです – zdim

+0

ああ...ありがとう。 :) – kobame

3

割り当て値配列に定義されるか、または未定義配列のようなものはありません

を定義していない限り。それはだ場合、配列に

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

を割り当てることが

は、アレイにデフォルト値を割り当てるためにいくつかの短縮方法は存在しない場合はここには@ARGV

@ARGVが常に存在します。ソースアレイがある場合、次を使用することができ、代替値を用いて、別に配列をコピーする

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