- ベストアンサー
Perlの名前付き引数について
よく Tkで (-flag=>1, -width=>3) という風に引数に名前が設定できる記述を見たのですが、関数の受け取り側でどのように処理しているのでしょうか? ({-flag=>1, -width=>3}) なら、ハッシュなので、 sub xxxxx($){ my ($h) = @_; $h->{-flag}などでアクセスできるのですが (-flag=>1, -width=>3)はどのようにパラメータを取得しているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#こんな感じかな 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で上書きされるわけです。