#!./perl BEGIN { chdir 't' if -d 't'; @INC = '../lib'; require './test.pl'; } plan tests => 47; $_ = 'abc'; $c = do foo(); is ($c . $_, 'cab', 'optimized'); $_ = 'abc'; $c = chop($_); is ($c . $_ , 'cab', 'unoptimized'); sub foo { chop; } @foo = ("hi \n","there\n","!\n"); @bar = @foo; chop(@bar); is (join('',@bar), 'hi there!'); $foo = "\n"; chop($foo,@foo); is (join('',$foo,@foo), 'hi there!'); $_ = "foo\n\n"; $got = chomp(); ok ($got == 1) or print "# got $got\n"; is ($_, "foo\n"); $_ = "foo\n"; $got = chomp(); ok ($got == 1) or print "# got $got\n"; is ($_, "foo"); $_ = "foo"; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is ($_, "foo"); $_ = "foo"; $/ = "oo"; $got = chomp(); ok ($got == 2) or print "# got $got\n"; is ($_, "f"); $_ = "bar"; $/ = "oo"; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is ($_, "bar"); $_ = "f\n\n\n\n\n"; $/ = ""; $got = chomp(); ok ($got == 5) or print "# got $got\n"; is ($_, "f"); $_ = "f\n\n"; $/ = ""; $got = chomp(); ok ($got == 2) or print "# got $got\n"; is ($_, "f"); $_ = "f\n"; $/ = ""; $got = chomp(); ok ($got == 1) or print "# got $got\n"; is ($_, "f"); $_ = "f"; $/ = ""; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is ($_, "f"); $_ = "xx"; $/ = "xx"; $got = chomp(); ok ($got == 2) or print "# got $got\n"; is ($_, ""); $_ = "axx"; $/ = "xx"; $got = chomp(); ok ($got == 2) or print "# got $got\n"; is ($_, "a"); $_ = "axx"; $/ = "yy"; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is ($_, "axx"); # This case once mistakenly behaved like paragraph mode. $_ = "ab\n"; $/ = \3; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is ($_, "ab\n"); # Go Unicode. $_ = "abc\x{1234}"; chop; is ($_, "abc", "Go Unicode"); $_ = "abc\x{1234}d"; chop; is ($_, "abc\x{1234}"); $_ = "\x{1234}\x{2345}"; chop; is ($_, "\x{1234}"); my @stuff = qw(this that); is (chop(@stuff[0,1]), 't'); # bug id 20010305.012 @stuff = qw(ab cd ef); is (chop(@stuff = @stuff), 'f'); @stuff = qw(ab cd ef); is (chop(@stuff[0, 2]), 'f'); my %stuff = (1..4); is (chop(@stuff{1, 3}), '4'); # chomp should not stringify references unless it decides to modify them $_ = []; $/ = "\n"; $got = chomp(); ok ($got == 0) or print "# got $got\n"; is (ref($_), "ARRAY", "chomp ref (modify)"); $/ = ")"; # the last char of something like "ARRAY(0x80ff6e4)" $got = chomp(); ok ($got == 1) or print "# got $got\n"; ok (!ref($_), "chomp ref (no modify)"); $/ = "\n"; %chomp = ("One" => "One", "Two\n" => "Two", "" => ""); %chop = ("One" => "On", "Two\n" => "Two", "" => ""); foreach (keys %chomp) { my $key = $_; eval {chomp $_}; if ($@) { my $err = $@; $err =~ s/\n$//s; fail ("\$\@ = \"$err\""); } else { is ($_, $chomp{$key}, "chomp hash key"); } } foreach (keys %chop) { my $key = $_; eval {chop $_}; if ($@) { my $err = $@; $err =~ s/\n$//s; fail ("\$\@ = \"$err\""); } else { is ($_, $chop{$key}, "chop hash key"); } }