忍者ブログ
  • 2024.04
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2024.06
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/05/06 15:58 】 |
Perlの配列
「リスト」とは、スカラーの集合のこと。データ。
「配列(array)」とは、リストを格納する変数のこと。

$fred
$fred[0]
$fred[1]
はすべて別物。紛らわしいけど。

インデックスが末尾より大きいときは、undefを返す。(未初期化スカラー変数にアクセスしたのと同じと考えればよい)
末尾のインデックス値は、$#fred で取得できる。(サイズ100の配列なら、$#fredは99)
インデックスは負値も指定できる。-1 は$#fredと同じ位置を指す。インデックスが負の方向にはみ出すとundefを返す。値を格納しようとすると致命的エラーになる。

リストリテラルの書き方は
(0, 1, 2)
("a", "b", "c")
qw (a b c) #上と同じ意味。シングルクォート文字列扱いであることに注意。
qw #これも同じ。デリミタは何の記号文字でもいい
qw !a b c! #これも同じ。

代入には
($a, $b, $c) = qw(a b c);
とする。
($lhs, $rhs) = ($rhs, $lhs);
とすればswapできる。
左右の要素数が合わないときは、黙って捨てられるか、undefが代入される。(元々値が入っていても、undefで上書きされる)

@記号を使うと、配列全体を表す。
($ary[0], $ary[1], $ary[2]) = qw(x y z);
@ary = qw(x y z); #上と同じ
@ary2 = (@ary, 3, @ary); #こんな書き方も

ただし、スカラーコンテキストでは、@ary は配列の要素数を返す。

インデックスを使わない書き方。
末尾に追加、削除する
@ary = (1, 2, 3);
push @ary, 0 # @ary == (1,2,3,0)
push @ary, @ary #@ary==(1,2,3,0,1,2,3,0)
push @ary, 5..7 #@ary == (1,2,3,0,1,2,3,0,5,6,7)
pop @ary #@ary == (1,2,3,0,1,2,3,0,5,6)

先頭に追加、削除する。shift(=pop),unshift(=push)

ソートする
@ary = sort @ary;
これはスカラーコンテキストはない(常にundefを返す)

要素を逆順にする
@ary = reverse @ary;
スカラーコンテキストでは、文字列の全文字を逆に並べる
$rev = reverse @ary; #@ary == (10,20,30) なら $rev = "030201"
どっちとも取れるコンテキストだと、リストコンテキストと見なすようだ
print reverse @ary; # 302010 と表示される
print scalar reverse @ary; # 030201 になる。スカラーコンテキストを強制
$rev = reverse @ary; #030201
@rev = reverse @ary; #30 20 10

リストコンテキストを強制するには、カッコをつける。
($a) = reverse @ary; # 実際reverseはリストコンテキストなので不要だが

その他の例

スカラーコンテキストでは、次の1行を返す
while () {...}
リストコンテキストでは、残りの行を配列にして返す
@lines = ;
PR
【2012/03/10 23:28 】 | perl | 有り難いご意見(0)
<<動画 | ホーム | Perlの実行>>
有り難いご意見
貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>