Life is very short

2013-06-13

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

| 15:05

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より前はそんな挙動だったのかという感じですが、

一応知っておいた方が良さそうです。

トラックバック - http://d.hatena.ne.jp/syohex/20130613/1371103504