アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlで
$ren{satou} = "25";

$ren{satou} = "44";
にする処理をsubで書きます。

 %ren = ( "suzuki","30","satou","25","tanaka","50" );
 sub func {
   $ren{satou} = "44";
 }
 &func;

これを、%renを渡してsub内で書換えるように変更します。
そのためにはどのようにすればよいですか?

 sub main {
   local %ren = ("suzuki","30","satou","25","tanaka","50");
   &func(%ren);
   print "Test ".$ren{satou}." Test";########「Test 44 Test」
 }
 sub func {
   @_?
   @_?{satou} = "44";
 }
 &main;

@_?のところをどう変更すればよいか教えてください。
連想配列を渡しています。
考え方ではなくて、この場合のソースを教えてください。

A 回答 (1件)

もし、お使いの Perl がバージョン 4 なら、


 &func(%ren);

 &func(*ren);
に変更し、func の方を
 sub func {
   local (*hash) = @_;
   $hash{satou} = "44";
 }
とします。

Perl 5 の場合、前述のコードでもできますが、普通は次のように my とリファレンスを使用します。
 &func(%ren);

 &func(\%ren);
に変更し、func は
 sub func {
   my ($hashref) = @_;
   $hashref->{satou} = "44";
 }
とします。
    • good
    • 0
この回答へのお礼

Perlはたぶん5だと思いますが、
&func(*ren);と&func(\%ren);の違いに関係なく、
local (*hash) = @_; $hash{satou} = "44";

my ($hashref) = @_; $hashref->{satou} = "44";
も成功しました。
ありがとうございました。

お礼日時:2004/03/18 20:41

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