- 締切済み
変数の宣言を省略する
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"; } だった場合についても教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- leaz024
- ベストアンサー率75% (398/526)
> {$_[0]}{satou} = "44"; > でもできてしまったんですが、このようにすることはPerlの規約外になるんでしょうか? それはおかしいですね。 普通なら構文エラーで実行すらできないはずです。 できれば最新版のPerl(5.8.x)を入れたほうが良いと思いますよ。
- leaz024
- ベストアンサー率75% (398/526)
> 変数を用意せずに > (@_)->{satou} = "44"; > のようにできるならその方法を教えてください。 my ($hashref) = @_; では、引数の配列である @_ の最初のデータを $hashref に入れているだけなので、直接 $_[0] を使えばできます。 つまり、 $_[0]->{satou} = "44"; また、 > local (*hash) = @_; > $hash{satou} = "44"; こちらの場合でも同じ方法でできるはずです。 ちなみに、 ${$_[0]}{satou} = "44"; と書くこともできます。
補足
ありがとうございます。どちらもできました。 ${$_[0]}{satou} = "44"; が {$_[0]}{satou} = "44"; でもできてしまったんですが、このようにすることはPerlの規約外になるんでしょうか?