Lists and Array
リストと配列

3 章 リストと配列

配列は変数の一種.配列とリストは変数とその内容という関係. これはスカラー変数の内容が整数リテラルなどであったのと同様である.

他の言語と同様に添字で特定の内容にアクセスできる.

$name[0] = 'Randal' ;
$name[1] = 'Tom' ;
print "($name[0], $name[1])\n";

配列の各要素はスカラー変数であり,他のスカラー変数同様先頭に "$" 記号を 付ける.配列全体を表す変数名の先頭には "@" をつける. また,第一要素が "Randal", 第二要素が"Tom"である リストは ('Randal','Tom') と書く.配列の内容がリストであるから上のプログラムは 以下のように書く事もできる.

@name = ('Randal', 'Tom') ;
print "($name[0], $name[1])\n";

要素の多いリストを楽にタイプできるように qw ショートカットがある. 以下のプログラムは上記 2 つと同じである.

@name = qw/Randal Tom/;
print "($name[0], $name[1])\n";

foreach (3.8 節)など,Perl には特殊化された機能が多い. 覚えるのは大変だがヘビーユーザーには快適なように設計されている.

3.8 節で foreach 制御構造について説明し, デフォルト変数 $_ について説明する

教科書 p.65, 3.8節最初の例を実際に動作させ,確認せよ.

3.8.1 節の "$_" も良く使われる簡略化なので知っておく必要がある.

スカラーコンテキストとリストコンテキスト

リスト全体を表すには添字なしで変数名の頭に "@" 記号をつけて表す. (p.60) 配列である "@" つきの変数の内容は本来リストである. しかし,スカラーが要求される場所に配列変数を書くと, 配列のサイズの値がスカラーとして得られる.下のプログラムを実行して確認せよ.

$name[0] = 'Randal' ;
$name[1] = 'Tom' ;
$n = @name;
print $n;

この配列の要素数を得る方法は配列すべての要素を処理するときによく使われる. 下記がその典型的な例である.

$name[0] = 'Randal' ;
$name[1] = 'Tom' ;
for ($i = 0 ; $i < @name ; $i++){
    print "$name[$i]\n";
}

この方法でループの終わりを指定することで配列の要素数が分からなくても 正しくすべての要素に対して処理が行える. 3.10 節の p.73, 18 行目の 文によりリストコンテキストで<STDIN>を使うと配列 @lines には 入力された行数に応じて可変個の要素が格納される.それをすべて出力 させるプログラムが以下のものである.

@lines = <stdin>;
chomp (@lines);
for ($i = 0 ; $i < @lines ; $i++){
    print "$lines[$i]\n";
}

上記プログラムを実効すると入力待ちになるので 文字列を数行入力した後,行頭で Ctrl-D を押せ. これで入力が終わったことをプログラムに伝えることができる. 入力した行がそのまま出力されることを確認せよ.

課題3

3.11 練習問題を解け. 解答プログラムを添付メールとして提出せよ. メールの宛先は <hiroshi@tokai.ac.jp> とし, Subject (件名)を report perl 3 とせよ.


Updated in November 12, 2003, schedule, Yamamoto Hiroshi