すぐわかるPerlでPerlを学ぶ(その3)

すぐわかるPerl (Software Technology)

すぐわかるPerl (Software Technology)


第四章

リストと配列
    • リストとは?

複数の値を持ったデータをリストと呼びます。そのままですね。値は()に入れて扱います。

    • 配列とは?

リストと同様に複数の値を持ったデータの集合です。リストと異なるのは配列の各要素に対して自由にアクセスできることです。アクセスには添え字と呼ばれる数値や文字列を使用します。perl連想配列なので文字列が使えて便利です。
配列の個々の要素にアクセスする時は$xxxx[添え字]でアクセスします。配列にアクセスする時は@xxxxでアクセスします。


リストと配列を使ったサンプルを作ってみました。

#!/usr/bin/perl

@myfamily = ("itotto", "marimari", "haho", "ao");

print("------------------------------------------\n");
for ( $i = 0; $i <= 3; $i++ )
{
        print($i."\t$myfamily[$i]\n");
}

($father, $mother, $daughter1, $daughter2) = @myfamily;

print("\n------------------------------------------\n");
print("father is $father\n");
print("mother is $mother\n");
print("eldest daughter is $daughter1\n");
print("second daughter is $daughter2\n");
print("\n------------------------------------------\n");


これを動かしてみます。

itotto@www >./arraytest.pl

------------------------------------------
0       itotto
1       marimari
2       haho
3       ao

------------------------------------------
father is itotto
mother is marimari
eldest daughter is haho
second daughter is ao

------------------------------------------

itotto@www >


ちゃんと代入も出来ています。

2つのコンテキスト
リストコンテキスト
@xxxxという記述は以下のときに配列全体をあらわします。これをリストコンテキストと呼びます。
    1. リストに代入するとき
    2. リストを代入するとき
    3. 配列同士を代入するとき
スカラーコンテキスト
@xxxxという記述は以下のときに配列の要素数をあらわします。これをスカラーコンテキストと呼びます。
    1. スカラー変数に代入するとき
    2. 数値と比較するとき
    3. 数式の一部として使用されるとき


サンプルは面倒なので割愛。ここらへんはフィーリングでいけます。

配列あれこれ
    • 配列要素の交換

Perlは配列の要素を交換するのもチョー簡単。

@hoge = ("element_2","element1");
# 要素の順番を間違って定義

($hoge[0],$hoge[1]) = ($hoge[1],$hoge[0]);
# 交換は一発で可能!!
    • 配列でさまざまな要素にアクセスする

配列へのアクセス方法にはいろいろと面白い方法があります。

@testarray = ("element1","element2","element3","element4","element5","element6");

# 配列の最後の要素にアクセス
# $#配列名 で最後の要素番号を返します
print("$testarray[$#testarray]\n");


# 配列の最後の方から要素にアクセス
# 負数でアクセスすると後ろからアクセスします
print("最後の要素       = $testarray[-1]\n");
print("最後からの2番目の要素 = $testarray[-2]\n");


# 配列の一部からリストを作成
# 2,4,6番目の要素を表示
print("@testarray[1,3,5]\n");

# 3番目から5番目の要素を表示
print("@testarray[2..4]\n");

# 100..105は100から105まで1ずつ増えていく数値のリストと同値
print(100..105);
print("\n");


実行するとこんな感じ。

itotto@www >./samplearray.pl

element6
最後の要素       = element6
最後からの2番目の要素 = element5
element2 element4 element6
element3 element4 element5
100101102103104105

itotto@www >
    • 配列にアクセスする便利なforeach

すべての配列要素にアクセスするときにはforeachがチョー便利。

まずはお小遣いを計算するサンプルはこちら。

#!/usr/bin/perl

# 月々のお小遣い
@money = (31000,28000,31000,30000,31000,40000,31000,31000,30000,31000,30000,41000);

$sum = 0;
foreach $eachmoney (@money)
{
        $sum += $eachmoney;
}

$avg = $sum/@money;

print("お小遣いは1年で$sum円もらっていて月平均は$avg円です\n");


実際に実行するとこんな感じです。

itotto@www >./testforeach.pl

お小遣いは1年で385000円もらっていて月平均は32083.3333333333円です

itotto@www >


ちなみに私はこんなにもらっていません。


こんな感じでリストと配列は完了。簡単だし使いやすいし非常に魅力的な機能満載です。