split関数

広告

「split」関数は対象となる文字列を指定のパターンで分割します。

指定したパターンに従って文字列を分割します。分割した各文字列は
リストとして取得します。

パラメータ:
  /PATTERN/ 分割パターン文字列
  EXPR  対象の文字列
  LIMIT  分割の最大数
戻り値:
  分割された文字列を要素とするリスト

1番目の引数には文字列を分割するためのパターンを指定します。パターンは正規表現を使って指定します(正規表現について解説すると長くなってしまうため、パターンの指定方法は正規表現の解説を確認して下さい)。パターンを省略した場合は1個以上の空白文字(スペース、タブ、改行)を表す「/¥s+/」を指定した場合と同じです。

2番目の引数には対象となる文字列を指定します。省略した場合にはデフォルト変数の「$_」が指定されたものとして扱われます。

3番目の引数には最大分割数を指定します。分割が指定した最大数に達すると、それ以上の分割は行われません。省略された場合は無制限となります。

具体的には次のように記述します。

my $targetstr = "My name is Gotou.";
my @strlist = split(/ /, $targetstr);

上記の場合は「My」「name」「is」「Gotou.」の4つの要素に分割されます。

分割数の取得

「split」関数の戻り値をリストではなく値として受け取るように記述した場合は、分割された要素の数を取得します。例えば次のように使用します。

my $targetstr = "My name is Gotou.";
my $count = split(/ /, $targetstr);

上記の場合は分割された個数である「4」が取得できます。

※ただし現在この使用方法は推奨されていないようですので注意して下さい。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $target = "My name is Gotou.";
print "$target¥n";

print "¥n空白で分割:¥n";

my @list = split(/ /, $target);
foreach my $parts(@list){
  print "$parts¥n";
}

print "¥n最大数2として空白で分割:¥n";

@list = split(/ /, $target, 2);
foreach my $parts(@list){
  print "$parts¥n";
}

上記を「test3-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

split関数

( Written by Tatsuo Ikura )