Perl flattens subroutine arguments - 単一のリストに - Perlはプロトタイプ化されていないすべてのサブルーチン呼び出しに対して自動的にhttp://en.wikipedia.org/wiki/Applyを実行します。したがって、$self->check_something (%hash, message => $input2);
の場合、%hash
は平坦化されます。
その場合:
%hash = (foo => 1, bar => 2);
あなたのサブ呼び出しがある:だから
$self->check_something(foo => 1, bar => 2, message => $input2);
、あなたは別のエンティティとしてあなたのハッシュを渡したい場合は、あなたが参照を渡す必要があります。
# Reference to hash:
$self->check_something(\%hash, message => $input2);
# To pass an anonymous copy:
$self->check_something({%hash}, message => $input2);
# To expand hash into an anonymous array:
$self->check_something([%hash], message => $input2);
ほとんどの場合、私が示した最初の2つの例のいずれかを実行したいと思うでしょう。
リスト平滑化の利点は、プログラマチックに引数リストを作成するのが非常に簡単だということです。例:
my %args = (
foo => 'default',
bar => 'default_bar',
baz => 23,
);
$args{foo} = 'purple' if $thingy eq 'purple people eater';
my %result = get_more_args();
@args{ keys %result } = values %result;
my_amazing_sub_call(%args);
my%p =%{$ ref};私にハッシュ・ファインを取得します。 – user238021
$ input2の値をサブルーチンの中に表示したいのですが、どうすればいいですか?私は$ message = $ _ [2]のような何かをするべきですか? – user238021
私の12月に忘れました。それは私の($ self、$ ref、$ message、$ input)= @ _でなければなりません。 =>はカンマのように動作するので、文字列 "message"と$ input2があれば何でも構いません。 – scrappedcola