まくまくPerlノート
リストスライス、配列スライス、ハッシュスライス
2008-02-28

リストから任意のインデックスの要素で構成されたリストを作成したい場合は、リストスライスの機能を使用することができます。リストを括弧 () で囲み、そのすぐ後ろにブラケット [] で囲んだインデックスのリストを渡します。

@arr = (0..10)[5, 0, 1];    # (5, 0, 1)
my($hour, $min, $sec) = (localtime)[2, 1, 0];

配列の任意のインデックスの要素を配列スライス (array slice) によって取り出すことができます。配列スライスによって取り出される値はリストなので、そのことを示すためにプレフィックスとして @ を付けます。

my @sliced = @arr[3, 0, 1, 2];
my @sliced = ($arr[3], $arr[0], $arr[1], $arr[2]);    # 上記と同様

配列スライスを左辺値 (lvalue) として使い、配列の要素を書き換えることもできます。

@arr[0, 1] = ('foo', 'bar');

ハッシュの任意のキーの要素をハッシュスライス (hash slice) によって取り出すことができます。ハッシュスライスによって取り出される値はリストなので、そのことを示すためにプレフィックスとして @ を付けます(配列スライスと同様)。

my @sliced = @hash{ qw/ key1, key2, key3 / };
my @sliced = ($hash{'key1'}, $hash{'key2'}, $hash{'key3'});    # 上記と同様
2008-02-28