アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

Perl で簡単に n 文字ずつ区切る

Perl である文字列を n 文字ずつ区切って配列にする方法。

例として "abcdefghi" が与えられた時に 3 文字ずつで区切りたい場合は "abc", "def", "ghi" となることが期待される。

これを簡単に行う方法を思いついたので以下に記述。

sub sep { $_[0] =~ /.{$_[1]}/g }

# 3 文字ずつ取得
my $str = "abcdefghi";
print "$_\n" for sep $str, 3;

3 文字の場合何をしているかというと sep サブルーチンの中では実質、次の正規表現が実行される。

"abcdefghi" =~ /.../g

これが 3 文字ずつで区切った配列を返す。それで .{$_[1]} としているのは上記の条件だと .{3} となり、... と等しくなる。

これは便利!!