From: Radu Greab Date: Tue, 6 Mar 2001 23:04:44 +0000 (+0200) Subject: Re: [ID 20010305.012] chop() against list assignment returns char chopped from el... X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2ec6af5f978df7271f6d544a10f1ed025070c53f;p=p5sagit%2Fp5-mst-13.2.git Re: [ID 20010305.012] chop() against list assignment returns char chopped from el zero Message-ID: <15013.20716.201459.540421@ix.netsoft.ro> p4raw-id: //depot/perl@9068 --- diff --git a/pp.c b/pp.c index 1bbb108..4c21f1b 100644 --- a/pp.c +++ b/pp.c @@ -745,9 +745,10 @@ PP(pp_schop) PP(pp_chop) { - dSP; dMARK; dTARGET; - while (SP > MARK) - do_chop(TARG, POPs); + dSP; dMARK; dTARGET; dORIGMARK; + while (MARK < SP) + do_chop(TARG, *++MARK); + SP = ORIGMARK; PUSHTARG; RETURN; } diff --git a/t/op/chop.t b/t/op/chop.t index 9eddded..1b55f11 100755 --- a/t/op/chop.t +++ b/t/op/chop.t @@ -1,6 +1,6 @@ #!./perl -print "1..34\n"; +print "1..37\n"; # optimized @@ -104,6 +104,15 @@ $_ = "\x{1234}\x{2345}"; chop; print $_ eq "\x{1234}" ? "ok 33\n" : "not ok 33\n"; -# TODO! Make sure chop(LIST) returns the right value. my @stuff = qw(this that); -print chop(@stuff[0,1]) eq 't' ? "ok 34 # TODO\n" : "not ok 34 # TODO\n"; +print chop(@stuff[0,1]) eq 't' ? "ok 34\n" : "not ok 34\n"; + +# bug id 20010305.012 +@stuff = qw(ab cd ef); +print chop(@stuff = @stuff) eq 'f' ? "ok 35\n" : "not ok 35\n"; + +@stuff = qw(ab cd ef); +print chop(@stuff[0, 2]) eq 'f' ? "ok 36\n" : "not ok 36\n"; + +my %stuff = (1..4); +print chop(@stuff{1, 3}) eq '4' ? "ok 37\n" : "not ok 37\n";