第4章「配列とリスト」
ここら辺からペースダウンしよう。
スクリプト実行の際に
スクリプトを写経して実行するときに重要そうなことが第1章に書いてあったのでまとめとく。
文法チェック
実行する前に
perl -cw hoge.pl
で文法チェックすると文法が正しいかチェックできる。
リファレンスperldoc
分からない事があったらperldocで調べられるらしい。例えば、rand関数の詳細を知りたければ
perldoc -f rand
ってするといいらしい。-fオプションってなんやろな?functionのfかな?
その他にも
perldoc
でperldocの簡単な使い方を、
perldoc perl
でPerlの概要を調べられるらしい(12ページより)。
配列とリスト
リスト
次のように書くと、いっぺんに代入できるそうだ。カンマで区切る記法をリストと言うらしい。
my ($x, $y, $z) = (10, 20, 30);
「リスト」と言うから線形リスト的なオブジェクトができているのかなーと思ったけど、よく分からん。こういう記法を「リスト」と呼ぶってことかな?
配列の作成
んで、このリストを使うと、配列を作れるのだとか。
my @nums = (1, 2, 3, 4, 5);
配列の変数名の先頭は$じゃなくて@なので注意。
配列の走査
配列はforeachで走査できる。
# foreachで走査 foreach (@nums) { print "$_ "; print "\n"; }
上記は
foreach my $tmp (@nums) { print "$tmp "; print "\n"; }
の省略した書き方だそうだ。一時変数を書く手間が省ける。
配列の要素へアクセス
添字でアクセスするには、@nums[$i] じゃなくて$nums[$i] なので注意!
print "$nums[0] $nums[1] $nums[2] $nums[3] $nums[4]\n";
二重引用符内での展開
配列を文字列の中で展開するとスペース区切りで文字列化される。
print "@nums\n";
配列への要素の追加
配列は伸びる。
$nums[5] = 60; foreach (@nums) { print "$_ "; } print "\n";
要素が文字列の配列
もちろん文字列の要素の配列も作れる。
my @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); print "@week\n";
二重引用符で囲まないと
二重引用符で囲まない場合は、スペースで区切られない。
print @nums; print "\n";
配列の要素数の取得
配列の長さは、スカラー変数に代入してみると分かる。
my $length = @nums; print "$length\n";
実際は、変数に代入しなくても、「スカラーコンテキストで評価」してやればいいらしい。コンテキストに関しては後ほど解説があるらしい。
配列の末尾の要素は次のように取得できる。
my $last = $nums[-1]; print "\$nums[-1] = $last\n";
また、別の方法として、
my $last = $nums[$#nums]; print "\$nums[\$#nums] = $last\n";
ってもの使える。
配列 @ar の添字に関しては、一般的に $#ar == @ar-1 が成り立つそうだ。つまり、末尾から順に $nums[-1], $nums[-2], $nums[-3], ... みたいにアクセスできる、と。
値の交換
値を交換するのにもリストが使える。
my $a = 42; my $b = 23; my $c = 'hoge'; ($a, $b, $c) = ($b, $c, $a); print "$a $b $c\n";
一時変数 $tmp 的なものを作らないで良いのね。
配列の連結
配列を連結するのにもリストを使える。
my @merged = (@nums, @week); print "@merged\n";
連結された配列はディープコピーされたものなので、変更しても元の配列に影響を及ぼさないとのこと。
分からないことなど
- リストって具体的に何者?どんな場面で出てくるの?どんな使い方をするの?
- コンテキストとは?