読者です 読者をやめる 読者になる 読者になる

perl-5.18で splitの挙動が変わっていた

http://perldoc.jp/docs/perl/5.18.0/perl5180delta.pod#splits32first32argument32is32more32consistently32interpreted


知らなかったのでメモ。Templateのテストが Perl 5.18でこけていたのは
これが原因のようです。なおリリースはされていないようですが、すでに修正は
マージされているようです.

Fix split for Perl 5.18.0 by jonjensen · Pull Request #19 · abw/Template2 · GitHub

変更点

splitの第一引数に空白一つの文字列リテラルを与えたときと
空白一つが代入された変数を指定したときの挙動が今まで違って
いたのが同じになったようです。

#!perl
use strict;
use warnings;

my $input = '  My name is Yamada Taro';

my $space = ' ';
my $a = join '_', split $space, $input;
my $b = join '_', split ' ', $input;

print "a = $a\n";
print "b = $b\n";
Perl 5.16.3での結果
a = __My_name_is_Yamada_Taro
b = My_name_is_Yamada_Taro
Perl 5.18.0での結果
a = My_name_is_Yamada_Taro
b = My_name_is_Yamada_Taro


むしろ 5.18.0より前はそんな挙動だったのかという感じですが、
一応知っておいた方が良さそうです。