こちらのブログでプログラミングを教えてるんですけど、プログラミングの基本といえば配列とオブジェクト指向だと思います。
もちろん、これ以外のことも大切ですが、初心者のうちはここを抑えておけばとりあえず何とかプログラムは書けるようになります。
最近はPerlをやることになりましたので、今回はPerlの配列について学習します。※配列といってもハッシュも含みます。
Perlでの変数、配列、ハッシュの定義
基本的な変数、配列、ハッシュの定義の仕方です。
1 2 3 4 5 6 7 8 |
#!/usr/bin/perl use strict; use warnings; my $test = "hoge"; my @arr = ("aa","bb","cc"); my %hash = (aaa=>100,bbb=>200); |
特段解説する必要もないかもしれないですが、Perlでの各データの定義方法です。
リファレンスとデリファレンス
昔はよくわからなかったのがこれです。
リファレンスとはつまり参照のことですね。
データそのものではなく、データを指しているもののことです。
Perlではこれを表現するのに、\をつけるだけで大丈夫です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
my $test_ref =\$test; my $arr_ref =\@arr; my $hash_ref =\%hash; print $test_ref ."\n"; print $arr_ref."\n"; print $hash_ref; #SCALAR(0x41f4f4) #ARRAY(0x797ffc) #HASH(0x4a5f04) #要素への参照 print $arr_ref->[0]."\n";#aaa print $hash_ref->{aaa};#100 |
出力してみるとわかるんですが、データのタイプ(SCALAR,ARRAY)などの後に、意味不明な番号がかかれていますね。
これがメモリのアドレスを指しているわけです。
また各要素にアクセスする場合は→を使ってアクセスすることができます。
ちなみにここからデータ自体を復元することをデリファレンスといいます。
1 2 3 4 5 6 7 |
print $$test_ref ."\n"; print @$arr_ref ."\n"; print %$hash_ref; #hoge #3 配列は要素数が出力される #bbb200aaa100 |
復元の仕方は上記の通りです。元のデータの演算子を書けばいいだけですね。
無名配列と無名ハッシュ、ハッシュを含んだ配列の定義
実務ではこのリファレンスを使ってデータをやり取りすることが非常におおいですね。
そのため実務でよく出てくる無名配列の定義の仕方や、無名ハッシュなどよく使われるものを下記に書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#配列の作成→リファレンスかと無名配列 my @arr2 =("hoge","foo"); my $arr2_ref=\@arr2; #下記の書き方で上記の配列の作成→リファレンス化を一気にできる my $arr3=["hoge","foo"]; #arr2_refと$arr3は同じ #ハッシュの作成→リファレンス化と無名ハッシュ my %hash2 = (first=>100,second=>200); my $hash2_ref =\%hash2; #下記の書き方で上記のハッシュの作成→リファレンス化を一気にできる my $hash3 = {fist=>100,second=>200}; #$hash2_refと$hash3は同じ #上記を応用した多次元配列の定義 my $student =[ {name=>"satou",age=>"35"}, {name=>"suzuki",age=>"25"}, {name=>"tanaka",age=>"29"} ]; print $student->[1]->{name};#suzuki; |
なお、「業務に役立つPerl」を参考にしました。