5

このサブルーチンが Perl で何をするのか疑問に思っていました。私は一般的な考えを持っていると信じていますが、いくつかの構文について疑問に思っています。

sub _init 
{
  my $self = shift;
  if (@_) {
    my %extra = @_;
    @$self{keys %extra} = values %extra;
  }
}

基本的に、変数 $self によって参照される名前のないハッシュに「余分な」キーと値のペアを追加します。また、これについて100%確信があるわけではありませんが、実際にはサブルーチンを呼び出しmy $self = shiftた変数を参照していると思います。$self_init()

私の具体的な質問は次のとおりです。

  1. $self は実際にサブルーチンを呼び出した変数を参照しています_init()か?
  2. @$書くときの構文の意味は何ですか@$self{keys %extra} = values %extra;
4

2 に答える 2

4

$self実際にサブルーチンを呼び出した変数を参照しています_init()か?

変数はサブルーチンを呼び出しません。

->invocant ( inの左側にあるもの->_init()) は、最初の引数としてメソッドに渡され、これを に配置し$selfます。(はin subsshift()の略です。)shift(@_)

@$書くときの構文の意味は何ですか@$self{keys %extra} = values %extra;

@hash{LIST}ハッシュ スライスです。

@{ EXPR }{LIST}スライスへのハッシュが参照によって指定されるハッシュ スライスです。EXPRが単純なスカラー ルックアップの場合、カーリーはオプションなので、 のよう@{ $hash_ref }{LIST}に記述できます@$hash_ref{LIST}

%$selfこのメソッドは、呼び出し元として使用されるハッシュベースのオブジェクトに引数を追加します。次のように書くこともできます。

%$self = ( %$self, @_ );
于 2013-09-18T17:33:28.887 に答える