Akihiro's Programmer Blog

Technology Notes for Personal

「初めてのPerl」 第三章 - 2

第三章の続きから。



第三章 リストと配列

用語集

コードポイント 全てのUnicode文字に割り振られているIDのようなもの。
コンテキスト 文脈。Perlの変数は状況に応じて適切な出力を行う。




Point


  • foreach制御構造。
@array = ( 1..10 );
foreach ( @array ) {
    print $_;
}

#配列要素を順番に処理していく
#各要素はデフォルトでは$_でアクセスできる

#注意すべきは$_はコピーではなく要素そのものであること
#だから
foreach ( @array ) {
    $_ = 0;
}

#こうすると@arrayの要素全てが0になってしまう


#配列またはリストの逆順を返す
@array = ( 1..10 );
@array = reverse @array;

#引数の配列要素は逆順にはならない
#だからこれではダメ
reverse @array;


#配列またはリストをコードポイント順にソートする
@array = ( 1..10 );
@array = sort @array;

#この場合、順番は 1 10 2 3 4 5 6 7 8 9 になる
#これは文字列としてコードポイント順にソートしたためである

#ソートの順番を指定するのは14章でするらしい


#配列またはハッシュ(第六章で)の要素とindexを取り出す
@array = ( "a", "b", "c" );
while ( my( $index, $value ) = each @array ) {
    print "[$index] : $value\n";
}

#[0] : a
#[1] : b
#[2] : c
#

#eachを使わない場合
foreach ( 0..$#array ) {
    print "[$_] : $array[$_]\n";
}

#[0] : a
#[1] : b
#[2] : c
#

#場合によって使い分ける


  • スカラーコンテキストとリストコンテキスト。
#変数はコンテキスト(文脈)によって返す値が違ってくる
#例えば
@array = ( 1..3 );
@list = @array;    #リストを返す
$size = @array;    #3という配列のサイズを返す

#reverse演算子の挙動も変わってくる
@array = ( "ab", "cd", "ef" );
@bw = reverse @array;    #( "ef", "cd", "ab" )
$bw = reverse @array;    #"fedcba"


@array = ( 1..10 );
print @array;           #12345678910
print scalar @array;    #10




次回は

次回は第四章から。