#navi_header|Perl| 関数に配列またはハッシュのリファレンスを渡し、関数内で操作するサンプル #code|perl|> #!/usr/bin/perl use strict; use warnings; use Test::More qw(no_plan); sub foo { my $h = shift; $h->{'val1'} = "abcdefg"; return $h; } print "-------------------------\n"; print " Hash - Part I :\n"; print "-------------------------\n"; my $h1 = {val1 => 123, val2 => "faklsdjsd"}; my $ref_h = $h1; print "hash reference(1) : [", $h1, "]\n"; is($h1->{'val1'}, 123); is($h1->{'val2'}, "faklsdjsd"); my $h2 = foo($h1); print 'return ref of foo($h1) : [', $h2, "]\n"; is($ref_h, $h1); is($ref_h, $h2); is($h1->{'val1'}, "abcdefg"); is($h2->{'val1'}, "abcdefg"); print "-------------------------\n"; print " Hash - Part II :\n"; print "-------------------------\n"; my %h1 = (val1 => 456, val2 => "lsjakfsdl"); print "hash reference(2) : [", \%h1, "]\n"; $ref_h = \%h1; is($h1{'val1'}, 456); is($h1{'val2'}, "lsjakfsdl"); $h2 = foo(\%h1); print 'return ref of foo($h1) : [', $h2, "]\n"; is($ref_h, \%h1); is($ref_h, $h2); is($h1{'val1'}, "abcdefg"); is($h2->{'val1'}, "abcdefg"); print "-------------------------\n"; print " Arrays:\n"; print "-------------------------\n"; sub bar { my $a = shift; push @{$a}, "abcd"; return $a; } my @a1 = ( ); # is same as $a1 = [ ]; push @a1, 123; push @a1, "hogehoge"; print "array reference : [", \@a1, "]\n"; my $ref_a = \@a1; is(join(" ", @a1), '123 hogehoge'); my $a2 = bar(\@a1); print 'return ref of bar(\@a1) : [', $a2, "]\n"; is($ref_a, \@a1); is($ref_a, $a2); is(join(" ", @a1), '123 hogehoge abcd'); is(join(" ", @$a2), '123 hogehoge abcd'); ||< 実行例 #pre||> DOS> perl hash_ref.pl ------------------------- Hash - Part I : ------------------------- hash reference(1) : [HASH(0x284ef0)] ok 1 ok 2 return ref of foo($h1) : [HASH(0x284ef0)] ok 3 ok 4 ok 5 ok 6 ------------------------- Hash - Part II : ------------------------- hash reference(2) : [HASH(0x1941884)] ok 7 ok 8 return ref of foo($h1) : [HASH(0x1941884)] ok 9 ok 10 ok 11 ok 12 ------------------------- Arrays: ------------------------- array reference : [ARRAY(0x1941ac4)] ok 13 return ref of bar(\@a1) : [ARRAY(0x1941ac4)] ok 14 ok 15 ok 16 ok 17 1..17 ||< #navi_footer|Perl|