第4章「配列とリスト」

ここら辺からペースダウンしよう。

スクリプト実行の際に

スクリプトを写経して実行するときに重要そうなことが第1章に書いてあったのでまとめとく。

自分に厳しく

ソースコードの先頭に

use strict;
use warnings;

をつけると、処理系によるチェックが厳しくなるらしい。

文法チェック

実行する前に

perl -cw hoge.pl

で文法チェックすると文法が正しいかチェックできる。

いざ実行

スクリプトを実行するには

perl 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";

連結された配列はディープコピーされたものなので、変更しても元の配列に影響を及ぼさないとのこと。

分からないことなど

  • リストって具体的に何者?どんな場面で出てくるの?どんな使い方をするの?
  • コンテキストとは?