北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

splitと空文字列

このエントリに反応。*1

誰か解説求む。

では、解説します。perldocの日本語訳を読んでみました。まず、この一文がジュウヨウです。

LIMIT を指定しない場合は、 余分なヌルフィールドが除かれる

うわ・・・この仕様知らなかった。LIMITとはsplitの第3引数のことです。例えば、以下のようなコードを実行してみます。

my $csv_string = 'A/B//D/';
print '[', join(', ',
    split(qr(/), $csv_string)
), "]\n";

すると、末尾の空文字列が除かれて、[A, B, , D]が出力されると言うことです。で、もう一つperldocから抜き出してみます。

リストに代入する時に LIMIT が省略されていると、 perl はリスト中の変数の数より 1 多い数を LIMIT とする。

これがリストを指定したときと配列をしたときの違いです。リストを指定するとLIMIT、つまり第三引数を指定するのと同等の効果があるってことです。

よって、この二つの事実から、

my @arr_s  = split(/=/, '=');
# ↑第3引数を省略しているので、末尾の空文字列は返って来ない。
my ($s1, $s2, $s3)  = split(/=/, '=');
# ↑第3引数を4に指定するのと同等なので、末尾の空文字列も省略されず返って来る

と言うことになるのです。あー、すっきりした。

*1:自作自演