perlの復習(配列やハッシュ)
配列
sample1.pl
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; sub test1{ my @list = @_; print "test1 start\n"; print Dumper(@list); print "test1 end\n\n" } # type1 test1("111", "222", "333"); # type2 my @list1 = qw/aaa bbb/; test1(@list1, "ccc"); # type3 my @list2 = ("xxx", "yyy", "zzz"); test1(@list2); #type4 my $list3 = ["abc", "def", "ghi"]; test1(@{$list3});
↓
$ perl test1.pl test1 start $VAR1 = '111'; $VAR2 = '222'; $VAR3 = '333'; test1 end test1 start $VAR1 = 'aaa'; $VAR2 = 'bbb'; $VAR3 = 'ccc'; test1 end test1 start $VAR1 = 'xxx'; $VAR2 = 'yyy'; $VAR3 = 'zzz'; test1 end test1 start $VAR1 = 'abc'; $VAR2 = 'def'; $VAR3 = 'ghi'; test1 end mshige1979: ~ $
今までの手法の場合はtype1のように関数(サブルーチン)に1つずつに変数を設定して引数を渡すことを行っていたわけですが、Perlの場合は配列やハッシュで受け取れるので…
ハッシュ
sample3.pl
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; sub test1{ my %hash = @_; print "test1 start \n"; for my $key (keys %hash){ print "$key:" . $hash{$key} . "\n"; } print "test1 end\n\n"; } # type1 test1( aaa => 100, bbb => 200, ccc => 300 ); # type2 my %hash1 = ( xxx => 777, yyy => 888, ); test1( %hash1, zzz => 999, ); # type3 my %hash2 = ( abc => 123, def => 456, ghi => 789 ); test1(%hash2);
↓
$ perl test3.pl test1 start ccc:300 aaa:100 bbb:200 test1 end test1 start yyy:888 zzz:999 xxx:777 test1 end test1 start abc:123 ghi:789 def:456 test1 end $
一部だけハッシュや配列で固められているとちょっととまどいそうだけどまあ、やっと理解してきた感じ
cpanのソースやいろいろな場所のサンプルソースはこの書き方が普通に行われているので意識しておく必要がありそうです