Perl 配列

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は出力関数です。

次のテーブルには、配列で常用の関数を示します。

番号型と説明
1push @ARRAY, LIST
リストの値を配列の最後に放置します
2pop @ARRAY
配列の最後の値を削除します
3shift @ARRAY
配列の最初の値をポップして返します。配列のインデックス値も順番に1を減算します。
4unshift @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
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です