Perlで配列の先頭何要素かを抜き出す ― 2022年12月02日 02時16分
この記事はPerl Advent Calendar 2022の2日目の分です。
Perlで配列の先頭n要素を抜き出したいとき、最近はList::Util
モジュールのhead
関数を使えます。
use List::Util qw(head);
my @array1 = qw(a b c d e);
my @array2 = head 3, @array1;
# @array2の内容は('a', 'b', 'c')
List::Util
モジュールはコアモジュール(Perl本体と一緒にインストールされるモジュール)であり、Perl 5.28以降なら追加のモジュールインストールなしにhead
関数を使えます。それより古いPerlでは、List::Util
の新しいバージョン(1.50以降)をインストールする必要があります。
以前からある方法
配列スライスを使うこともできますが、抜き出す要素数から1引いた値を指定することになって、ちょっと紛らわしいです。
my @array1 = qw(a b c d e);
my @array2 = @array1[0 .. 2];
# @array2の内容は('a', 'b', 'c')
また、元の配列の要素数が抜き出す要素数より少ないときは、不足分がundef
で埋められてしまいます。
my @array1 = qw(a);
my @array2 = @array1[0 .. 2];
# @array2の内容は('a', undef, undef)
undef
で埋められたくなければ、min
関数を使うなどひと工夫する必要があります。
use List::Util qw(min);
my @array1 = qw(a);
my @array2 = @array1[0 .. min(2, $#array1)];
# @array2の内容は('a')
splice
関数を使うこともできますが、元の配列も変更されてしまいます。
my @array1 = qw(a b c d e);
my @array2 = splice @array1, 0, 3;
# @array1の内容は('d', 'e')
# @array2の内容は('a', 'b', 'c')
最近のコメント