• ベストアンサー

Perlの名前付き引数について

よく Tkで (-flag=>1, -width=>3) という風に引数に名前が設定できる記述を見たのですが、関数の受け取り側でどのように処理しているのでしょうか? ({-flag=>1, -width=>3}) なら、ハッシュなので、 sub xxxxx($){ my ($h) = @_; $h->{-flag}などでアクセスできるのですが (-flag=>1, -width=>3)はどのようにパラメータを取得しているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#こんな感じかな sub hashArg(%){ my %hash = @_; print "flag:$hash{-flag}\n"; print "width:$hash{-width}\n"; } hashArg(-flag=>1, -width=>3);

その他の回答 (1)

  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.2

その記法のメリットは引数の順序を無視できることですね。 もう一つ、ハッシュのキーが重複できないことを利用して my %in = (   -flag => 0,   -top => 0,   -left => 0,   @_, ); とデフォルトの値を設定し、続けて @_ を持ってくることで my %in =(   -flag => 0,   -top => 0,   -left => 0,   -flag => 1,   -width => 3, ); のように展開され、都合よくflagが1で上書きされるわけです。

関連するQ&A