• 締切済み

変数の宣言を省略する

 sub main {    local %ren = ("suzuki","30","satou","25","tanaka","50");    &func(\%ren);    print "Test ".$ren{satou}." Test";########「Test 44 Test」  }  sub func {    my ($hashref) = @_;    $hashref->{satou} = "44";  }  &main; このソースは sub func の中で「my ($hashref)」を宣言していますが 変数を用意せずに   (@_)->{satou} = "44"; のようにできるならその方法を教えてください。  sub func {    local (*hash) = @_;    $hash{satou} = "44";  } だった場合についても教えてください。

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

> {$_[0]}{satou} = "44"; > でもできてしまったんですが、このようにすることはPerlの規約外になるんでしょうか? それはおかしいですね。 普通なら構文エラーで実行すらできないはずです。 できれば最新版のPerl(5.8.x)を入れたほうが良いと思いますよ。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

> 変数を用意せずに >   (@_)->{satou} = "44"; > のようにできるならその方法を教えてください。  my ($hashref) = @_; では、引数の配列である @_ の最初のデータを $hashref に入れているだけなので、直接 $_[0] を使えばできます。 つまり、  $_[0]->{satou} = "44"; また、 >  local (*hash) = @_; >  $hash{satou} = "44"; こちらの場合でも同じ方法でできるはずです。 ちなみに、   ${$_[0]}{satou} = "44"; と書くこともできます。

nwycuar
質問者

補足

ありがとうございます。どちらもできました。 ${$_[0]}{satou} = "44"; が {$_[0]}{satou} = "44"; でもできてしまったんですが、このようにすることはPerlの規約外になるんでしょうか?

関連するQ&A