home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Perl/codepiece/array_hash2(関数への参照渡し)

Perl/codepiece/array_hash2(関数への参照渡し)

Perl / codepiece / array_hash2(関数への参照渡し)
id: 343 所有者: msakamoto-sf    作成日: 2004-09-15 22:32:42
カテゴリ: 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');

実行例

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


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-04-12 22:35:14
md5:327669ef8d4f76d65cfb2dea4f3c87a8
sha1:cb596650dcbd1cfb46466bd8a6e72be76a5aca2f
コメント
コメントを投稿するにはログインして下さい。