2011-01-28 9 views
0

Perlを学習し始めました。Perlのサブリファレンス構文

これは私がサブ関数に配列を取得するために行っていることです - これは1行で簡単に行うことができますか?

あなただけ

@_は、パラメータの受け渡しに使用される、デフォルトの配列/リストです
sub my_sub { 
    my @array = @{$_[0]}; 
} 

として簡素化することができ

sub my_sub { 
    my $ref_array = shift; 
    my @array = @$ref_array; 
} 
+4

できますか*簡単にできますか?あなたは何をしようとしているのですか?なぜ最初の場所に配列をコピーするのですか? – tchrist

+1

なぜあなたは単一の配列で参照渡しを使用しているのですか? in @ *をin-situで使うのはどうですか? – tchrist

答えて

3

あなたにもshiftの効果をしたい場合は、

sub my_sub { 
    my @array = @{+shift}; 
} 

表現として扱われるunary + operatorshiftは、ありません変数名。 (それ以外の場合は@{shift}@shiftと同じ意味です)

+5

これはかなり役に立たない。私はポスターが十分にうまくいく必要があると説明したとは思わない。また、私は、無限に明確な 'shift()'を書くのに気を使うことができない人々のために、細かい '+ shift 'を軽蔑します。 – tchrist

+3

TMTOWTDI;私は 'shift()'よりも '+ shift 'が好きです。正直なところ、これは他の答えよりもOPのオリジナルに近いです。私はこれが*正しいことではないと言う十分な文脈はないと思います。 – ephemient

+0

IMHO "' + shift' "は読みにくくメンテナンスが容易ではありません。また、別のコメントでtchristが指摘したように、コピーによって参照されていない配列に変換するだけでは、配列を渡して参照することはできません。 – DVK

2

0

これは、はるかに安上がりの一体です:

local *array = shift(); 
+2

少なくとも同等のビットではありません。 – hobbs

+0

Perlの中級レベルの魔法を学ぼうとすると、ここに何を置いているのですか? @arrayへの参照を渡された配列参照に設定していますか? %arrayまたは$ arrayではなく、@arrayを作成することをどのように知っていますか?この*演算子(perlop?)の詳細はどこで知ることができますか?ありがとう! –

+4

@ tchrist:なぜ敵意?もう少し説明をすれば、あなたの投稿をより良くすることができます。彼の例が "ナンセンス"だと思うなら、自分の答えに* why *を説明し、あなたの選択肢がなぜ優れているのかを説明することは有益でしょう。良い答えを与える芸術があります、そして、コメントで動揺することはあなたがその道にいる印ではありません。 –

2

もう1つの方法は、配列参照であることを心配することではありません。そのままそのまま残り、そのままサブの残りの部分で使用してください。