プロが教える店舗&オフィスのセキュリティ対策術

よく Tkで (-flag=>1, -width=>3)
という風に引数に名前が設定できる記述を見たのですが、関数の受け取り側でどのように処理しているのでしょうか?


({-flag=>1, -width=>3})
なら、ハッシュなので、
sub xxxxx($){
my ($h) = @_;
$h->{-flag}などでアクセスできるのですが


(-flag=>1, -width=>3)はどのようにパラメータを取得しているのでしょうか?

A 回答 (2件)

#こんな感じかな


sub hashArg(%){
my %hash = @_;
print "flag:$hash{-flag}\n";
print "width:$hash{-width}\n";
}

hashArg(-flag=>1, -width=>3);
    • good
    • 0

その記法のメリットは引数の順序を無視できることですね。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!