perl配列

参照

定数配列の参照は [定数、定数、定数 ]
配列の参照は \@変数名

配列(リスト)

配列変数は $tmp[添字] のように記述する.
配列全体(リスト)を表わすときには @tmp と書く.
配列はリストとして保存されている.リストは(1,2,3)のように書く
最初の添字は0
@tmp = (1, 2, 3);
print $tmp[0]; # 1
$#tmp は, 配列 @tmp の1番最後の要素の添字を表わす(要素数-1).
print $tmp[$#tmp]; # 3
配列 @tmp はスカラーコンテキストが要求されるところでは要素数を表す. (for文で便利)
print @tmp; # 123
print @tmp + 0; # 3
("hoge", "hero", "hoe") と書くと hoge, hero, hoe という文字列を要素にもつ配列になる.
(1 .. n) と書くと 1 から n までを要素に持つ配列になる.
配列 @tmp を空にするには,空配列()を代入する. 確保したメモリ空間は開放される.
@tmp = ();
関数 exists を使うと配列の要素が確保されているかチェックできる.
print $tmp[$i] if exists $tmp[$i];
C言語のように予め要素数を宣言しておく必要はない.必要に応じてメ モリを確保する.サイズのわからないファイルを1行ずつ配列に保存し ていくことも可能.


連想配列(ハッシュ)


連想配列とは,引数として文字列を指定できる便利な配列である (c++のSTLでいうmap).
通常,連想配列の引数のことをキー, 連想配列に格納された値のことをバリューと呼ぶ.
連想配列は $tmp{キー} のように記述する.
$tmp{'文字列'}, $tmp{$hoge}
連想配列そのものを表わすときには %tmp と書く.
連想配列を初期化して値を代入するには,次のようにする
%tmp = ( aaa => 10, bbb => 20, ccc => 30 );
print $tmp{'bbb'}; # 20
keys関数は連想配列のキーのみからなる配列を返す. values関数は連想配列のバリューのみからなる配列を返す.
print keys(%tmp); # cccbbbaaa
print values(%tmp); # 302010
それぞれ取り出される順番は、決まっていない (実行する度に変化する).
each関数は連想配列のキーとバリューを順番に一つずつ返す. キーの配列を作成しないので, 巨大な連想配列の出力時にはメモリをあまり食わない.
%tmp = ( aaa => 10, bbb => 20, ccc => 30 );
while ( ($key, $value) = each %tmp ) {
  print "$key,$value\n";
}
連想配列 %tmp を空にするには,
%tmp = ();
関数 exists を使うと連想配列のキーが定義されているかチェックできる.
print $tmp{'aaa'} if exists $tmp{'aaa'};




多次元配列を静的に作成


2次元配列


@list = (
  [ "LUCY", "LIU" ],
   [ "CAMERON", "DIAZ" ],
   [ "DREW", "BARRYMORE", "produced by drew" ],
);

print $list[0][0], " & ", $list[1][0], " & ", $list[2][0];
> LUCY & CAMERON & DREW

print $list[2][2];
> produced by drew

多次元配列にアクセス

perlには多次元配列は存在せず、リファレンスに配列のポインタが入る。


# 要素に値を代入
$list[0][0] = "Jini";

# リファレンスを使って全体を表示
for my $ref ( @list ){
  print "@$ref\n";
}

# 1つずつ全体を表示(シンプルな方法)
for my $ref( @list ){
  for $ref2( @{$ref} ){
       print $ref2, "\n";
   }
}

# 1つずつ全体を表示
for my $i( 0 .. $#list ){
  for $j ( 0...$#{$list[$i]} ){
       print "$i $j : $list[$i][$j]\n";
   }
}

連想配列

最初にキーの数を宣言しておくと高速化する。
my %hash = ();

#-- ここで個数を指定する --#
keys(%hash) = 30000; #この場合は3万件

メモリ解放

Perlの場合,変数を削除してメモリを解放するには,
次の命令を使用する.

<ハッシュ要素・配列要素・リファレンスを削除してメモリを解放>
delete [変数]
  例:delete $hash{$key};
  例:delete $array[$index];

<変数・ハッシュ・配列全体を削除してメモリを解放>
undef [変数]
  例:undef %hash;
  例:undef @array;

  • 最終更新:2009-09-28 14:46:02

このWIKIを編集するにはパスワード入力が必要です

認証パスワード