chompとchopと$/
声に出して言うと、チョンプとチョップとダラースラーッシュ!
言ってみたかっただけデス。
chompは文字列の最後に改行があれば取り除いてくれて、
chopは文字列の最後の文字を取り除いて、それを返してくれます。
ちなみに、chompの戻り値は、取り除いた文字列の数です。
use v5.10;
use strict;
use warnings;
use Test::More;
{
is $/, "\n";
my @got = ( "aaa\n", "aaa\r", "aaa\r\n" );
is chomp(@got), 2;
my @expected = ( "aaa", "aaa\r", "aaa\r" );
is_deeply \@got, \@expected;
}
{
local $/ = "\r\n";
my @got = ( "aaa\n", "aaa\r", "aaa\r\n" );
is chomp(@got), 2; # length("\r\n") = 2
my @expected = ( "aaa\n", "aaa\r", "aaa" );
is_deeply \@got, \@expected;
}
{
local $/ = "\r";
my @got = ( "aaa\n", "aaa\r", "aaa\r\n" );
is chomp(@got), 1;
my @expected = ( "aaa\n", "aaa", "aaa\r\n" );
is_deeply \@got, \@expected;
}
これを実行すると、こんな感じ。
$ perl aaa.pl
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
1..7
chompと$/の関係はこんな感じです。
例えば改行が\rの場合とか、もう大丈夫ですね。
ちなみに、$/を変更しない場合は、
実行環境によって、$/が異なるようです。
手元の環境(Mac OS 10.8.5)だと、こんな感じ。
use v5.10; use strict; use warnings; say '$/ is CR' if $/ eq "\r"; say '$/ is LF' if $/ eq "\n"; say '$/ is CRLF' if $/ eq "\r\n";
$ perl bbb.pl
$/ is LF
最後に、chopですが、リストにも使えるようです。
え?戻り値は???って思った方は、こちらをどうぞ。
use v5.10; use strict; use warnings; my @foo = ( "aaa", "bbb", "ccc" ); say chop( @foo ); say join( ',', @foo );
最後の要素をchopしたときの結果が格納されるので、
この場合、”ccc”の最後の文字が取得できます。
$ perl ccc.pl
c
aa,bb,cc
ほんのちょっと、賢くなりました。
おしまい。
Leave a Comment