Perl配列は、スカラー値を格納するリスト変数です。変数はさまざまな型にすることができます。
配列変数は@で始まります。配列要素にアクセスすることは、$ +変数名+ [インデックス値]の形式を使用して読み取ります。次には例を挙げます。
実例
#!/usr/bin/perl
@hits = (25, 30, 40);
@names = ("google", "ceodata", "yahoo");
print "\$hits[0] = $hits[0]\n";
print "\$hits[1] = $hits[1]\n";
print "\$hits[2] = $hits[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";
プログラムでは、$記号は\を使用してエスケープするため、そのままで出力します。
上記のプログラムを実行した出力結果は次のとおりです。
$hits[0] = 25
$hits[1] = 30
$hits[2] = 40
$names[0] = google
$names[1] = ceodata
$names[2] = yahoo
目次
配列を作成する
配列変数は@記号で始まり、要素は括弧で囲まれ、qwで始まる配列を定義することもできます。
@array = (1, 2, 'Hello');
@array = qw/これは配列です/;
2番目の配列はqw //演算子を使用し、文字列のリストを返し、配列要素がスペースで区切られます。 もちろん、複数の行を使用して配列を定義することもできます。
@days = qw/google
yahoo
...
ceodata/;
インデックスによって配列に値を割り当てることもできます。次には例を挙げます。
$array[0] = 'Monday';
...
$array[6] = 'Sunday';
配列要素にアクセスする
配列要素にアクセスすることは、$ +変数名+ [インデックス値]の形式を使用して読み取ります。次には例を挙げます。
実例
@sites = qw/google yahoo ceodata/;
print "$sites[0]\n";
print "$sites[1]\n";
print "$sites[2]\n";
print "$sites[-1]\n"; # 負数、逆方向に読み取り
上記のプログラムを実行した出力結果は次のとおりです。
google
yahoo
ceodata
ceodata
配列のインデックス値は0から始まります。つまり、0が最初の要素で、1が2番目の要素で、このように類推します。
負数は逆方向から読み取られます。-1は最初の要素で、-2は2番目の要素です。
配列のシリアル番号
Perlは、順番に出力できる配列形式を提供します。その形式は、開始値+ .. +終了値です。次には例を挙げます。
実例
#!/usr/bin/perl
@var_10 = (1..10); @var_20 = (10..20);
@var_abc = ('a'..'z');
print "@var_10\n";
# 1から10を出力する
print "@var_20\n"; # 10から20を出力する
print "@var_abc\n"; # aからzを出力する
上記のプログラムを実行した出力結果は次のとおりです。
1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z
配列のサイズ
配列のサイズは、配列内のスカラコンテキストによって決定されます。
@array = (1,2,3);
print "配列のサイズ: ",スカラー @array,"\n";
配列の長さは、要素の個数ではなく、配列の物理的なサイズを返します。次には例を挙げます。
実例
#!/uer/bin/perl
@array = (1,2,3);
$array[50] = 4;
$size = @array;
$max_index = $#array;
print "配列のサイズ: $size\n";
print "最大のインデックス: $max_index\n";
上記のプログラムを実行した出力結果は次のとおりです。
配列のサイズ: 51
最大のインデックス: 50
出力結果から見ると、配列には4つの要素しかありませんが、配列のサイズは51です。
配列要素の追加と削除
Perlには、配列要素を追加および削除するため、いくつかの有効な関数を提供します。
プログラミングの経験がない場合には、関数とは何かを尋ねるかもしれません。実際、前の記事で学んだprintは出力関数です。
次のテーブルには、配列で常用の関数を示します。
番号 | 型と説明 |
1 | push @ARRAY, LIST リストの値を配列の最後に放置します |
2 | pop @ARRAY 配列の最後の値を削除します |
3 | shift @ARRAY 配列の最初の値をポップして返します。配列のインデックス値も順番に1を減算します。 |
4 | unshift @ARRAY, LIST リストを配列の前に放置し、新しい配列の要素の個数を返します。 |
実例
#!/usr/bin/perl # シンプルな配列を作成する
@sites = ("google","runoob","taobao");
$new_size = @sites ;
print "1. \@sites = @sites\n"."元の配列の長さ :$new_size\n"; # 配列の最後に要素を追加する
$new_size = push(@sites, "bing");
print "2. \@sites = @sites\n"."新しい配列の長さ :$new_size\n"; # 配列の先頭に要素を追加する
$new_size = unshift(@sites, "weibo");
print "3. \@sites = @sites\n"."新しい配列の長さ :$new_size\n"; # 配列の最後にある要素を削除する
$new_byte = pop(@sites);
print "4. \@sites = @sites\n"."ポップアップの要素 :$new_byte\n"; # 配列の先頭にある要素を削除する
$new_byte = shift(@sites);
print "5. \@sites = @sites\n"."ポップアップの要素 :$new_byte\n";
上記のプログラムを実行した出力結果は次のとおりです。
1. @sites = google ceodata yahoo
元の配列の長さ :3
2. @sites = google ceodata yahoo bing
新しい配列の長さ :4
3. @sites = msn google ceodata yahoo bing
新しい配列の長さ :5
4. @sites = msn google ceodata yahoo
ポップアップの要素 :bing
5. @sites = google ceodata yahoo
ポップアップの要素 :msn
配列を切り取る
配列を切り取り、切り取った後に新しい配列を返します。
実例
#!/usr/bin/perl
@sites = qw/google yahoo ceodata ebay naver facebook msn/;
@sites2 = @sites[3,4,5]; print "@sites2\n";
上記のプログラムを実行した出力結果は次のとおりです。
ebay naver facebook
配列インデックスは、有効なインデックス値を指定する必要があります。正数と負数を続けることができ、各インデックス値はコンマで区切られます。
連続インデックスの場合は、..を使用して指定した範囲を示すことができます。
実例
#!/usr/bin/perl
@sites = qw/google yahoo ceodata ebay naver facebook msn/;
@sites2 = @sites[3..5]; print "@sites2\n";
上記のプログラムを実行した出力結果は次のとおりです。
ebay naver facebook
配列要素を置き換える
Perlの配列要素を置き換えるため、splice()関数を使用されます。構文形式は次のとおりです。
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
パラメータの説明:
- @ARRAY:置き換える必要のある配列。
- OFFSET:開始位置。
- LENGTH:置き換える要素の個数。
- LIST:要素リストを置き換える。
次の例では、6番目の要素から始まる配列内の5つの要素を置き換えます。
実例
#!/usr/bin/perl
@nums = (1..20);
print "置き換える前 - @nums\n";
splice(@nums, 5, 5, 21..25);
print "置き換えた後 - @nums\n";
上記のプログラムを実行した出力結果は次のとおりです。
置き換える前 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
置き換えた後 - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
文字列を配列に変換する
split()関数を使用して、Perlで文字列を配列に変換します。構文は次のとおりです。
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
パラメータの説明:
- PATTERN:区切り文字。デフォルトでスペースと認められる。
- EXPR:文字列の数を指定する。
- LIMIT:このパラメータを指定すると、配列内の要素の個数が返される。
実例
#!/usr/bin/perl # 文字列を定義する
$var_test = "ceodata";
$var_string = "www-ceodata-com";
$var_names = "google,yahoo,ceodata,msn"; # 文字列を配列に変換する
@test = split('', $var_test);
@string = split('-', $var_string);
@names = split(',', $var_names);
print "$test[3]\n"; # 出力 d
print "$string[2]\n"; # 出力 com
print "$names[3]\n"; # 出力 msn
上記のプログラムを実行した出力結果は次のとおりです。
o
com
msn
配列を文字列に変換する
Perlでは、join() 関数を使用して配列を文字列に変換します。構文形式は次のとおりです。
join EXPR, LIST
パラメータの説明:
- EXPR:オーバーライン記号。
- LIST:リストまたは配列。
実例
#!/usr/bin/perl # 文字列を定義する
$var_string = "www-ceodata-com";
$var_names = "google,yahoo,ceodata,msn"; # 文字列を配列に変換する
@string = split('-', $var_string);
@names = split(',', $var_names); # 配列を文字列に変換する
$string1 = join( '-', @string );
$string2 = join( ',', @names );
print "$string1\n";
print "$string2\n";
上記のプログラムを実行した出力結果は次のとおりです。
www-ceodata-com
google,yahoo,ceodata,msn
配列のソート
Perlで配列のソートには、sort() 関数を使用します。構文形式は次のとおりです。
sort [ SUBROUTINE ] LIST
パラメータの説明:
- SUBROUTINE:ルールを指定する。
- LIST:リストまたは配列。
実例
#!/usr/bin/perl # 配列を定義する
@sites = qw(google yahoo ceodata facebook);
print "ソート前: @sites\n"; # 配列をソートする
@sites = sort(@sites);
print "ソート後: @sites\n";
上記のプログラムを実行した出力結果は次のとおりです。
ソート前: google yahoo ceodata facebook
ソート後: facebook google ceodata yahoo
ヒント:配列のソートはASCII数値に基づいています。したがって、配列をソートする場合、ソートする前に各要素を小文字に変換することを推奨します。
特別な変数:$[
特別な変数$[は、配列の最初のインデックス値を表します。通常は0です。もし$[を1に設定すれば、配列の最初のインデックス値は1になり、2番目のインデックス値は2になります。次には例を挙げます。
実例
#!/usr/bin/perl # 配列を定義する
@sites = qw(google yahoo ceodata facebook);
print "ウェブサイト: @sites\n"; # 配列の最初のインデックスを1に設定する $[ = 1;
print "\@sites[1]: $sites[1]\n";
print "\@sites[2]: $sites[2]\n";
上記のプログラムを実行した出力結果は次のとおりです。
ウェブサイト: google yahoo ceodata facebook
@sites[1]: google
@sites[2]: yahoo
通常、特別な変数$[を使用することはお勧めしません。Perlの新しいバージョンでは、この変数は廃止されました。
配列をマージする
配列の要素はコンマで区切られています。コンマを使用して配列をマージできます。次には例を挙げます。
実例
#!/usr/bin/perl
@numbers = (1,3,(4,5,6));
print "numbers = @numbers\n";
上記のプログラムを実行した出力結果は次のとおりです。
numbers = 1 3 4 5 6
配列に複数の配列をネストし、それらをメイン配列にマージできます。
実例
#!/usr/bin/perl
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers = (@odd, @even);
print "numbers = @numbers\n";
上記のプログラムを実行した出力結果は次のとおりです。
numbers = 1 3 5 2 4 6
リストから要素を選択する
リストは配列として使用できます。リストの後にインデックス値を指定して、指定した要素を読み取ることができます。次には例を挙げます。
実例
#!/usr/bin/perl
$var = (5,4,3,2,1)[4];
print "var の値 = $var\n"
上記のプログラムを実行した出力結果は次のとおりです。
var の値 = 1
同様に、配列で..を使用して、指定された範囲の要素を読み取ることができます。
実例
#!/usr/bin/perl
@list = (5,4,3,2,1)[1..3];
print "list の値= @list\n";
上記のプログラムを実行した出力結果は次のとおりです。
list の値 = 4 3 2
コメントを残す