split関数 - 文字列の分割
split関数を使用すると区切り文字を指定して文字列を分割することができます。
my @ret = split(/,/, $person_csv);
第1引数には区切り文字を正規表現で指定します。第2引数には分割したい文字列を指定します。戻り値は分割された文字列の配列です。
正規表現を使う
split関数は、第一引数に正規表現を受け取るので、複数の空白で分割ということも簡単にできます。
my @ret = split(/ +/, $line);
文字列の連結
split関数は、文字列を分解しますが、その反対の操作として、文字列の連結を行いたい場合は、join関数を使用します。join関数については以下の記事をご覧ください。
サンプル
split関数のサンプルプログラムです。
CSVデータ
CSV形式のデータを配列に変換するサンプルです。
# CSV形式のデータを配列に変換 my $string = 'a,b,c'; my @record = split /,/, $string;
空白区切り
空白で区切られたデータ配列に変換するサンプルです。
# 空白で区切られたデータを配列に変換 my $string = 'a b c'; my @record = split /\s+/, $string;
カンマ区切り
カンマ区切りの文字列を処理するサンプルです。
use strict; use warnings; # 1: カンマ区切りの文字列を処理する。 my $header_csv = "name,age,country\n"; my $person_csv = "kaori,23,Japan\n"; # chomp関数で改行を取り除く chomp $header_csv; chomp $person_csv; # split関数を用いて、区切り文字にカンマを指定する。 # split( /区切り文字/, 文字列 ) my @header = split(/,/, $header_csv); my @person_attribute = split(/,/, $person_csv); print "1: カンマ区切りの文字列を処理する。\n"; print "\$header_csv = $header_csv\n"; print "\$person_csv = $person_csv\n"; print "\n"; for my $i (0 .. 2) { print "\$header[ $i ] = " . $header[$i] . "\n"; print "\$person_attribute[ $i ] = " . $person_attribute[$i] . "\n\n"; }
実行結果
1: カンマ区切りの文字列を処理する。 $header_csv = name,age,country $person_csv = kaori,23,Japan $header[ 0 ] = name $person_attribute[0] = kaori $header[ 1 ] = age $person_attribute[1] = 23 $header[ 2 ] = country $person_attribute[2] = Japan