diff options
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 31 |
1 files changed, 9 insertions, 22 deletions
@@ -794,7 +794,11 @@ PP(pp_trans) PP(pp_schop) { dVAR; dSP; dTARGET; - do_chomp(TARG, TOPs, FALSE); + const bool chomping = PL_op->op_type == OP_SCHOMP; + + if (chomping) + sv_setiv(TARG, 0); + do_chomp(TARG, TOPs, chomping); SETTARG; RETURN; } @@ -802,29 +806,12 @@ PP(pp_schop) PP(pp_chop) { dVAR; dSP; dMARK; dTARGET; dORIGMARK; - while (MARK < SP) - do_chomp(TARG, *++MARK, FALSE); - SP = ORIGMARK; - XPUSHTARG; - RETURN; -} + const bool chomping = PL_op->op_type == OP_CHOMP; -PP(pp_schomp) -{ - dVAR; dSP; dTARGET; - sv_setiv(TARG, 0); - do_chomp(TARG, TOPs, TRUE); - SETs(TARG); - RETURN; -} - -PP(pp_chomp) -{ - dVAR; dSP; dMARK; dTARGET; dORIGMARK; - - sv_setiv(TARG, 0); + if (chomping) + sv_setiv(TARG, 0); while (MARK < SP) - do_chomp(TARG, *++MARK, TRUE); + do_chomp(TARG, *++MARK, chomping); SP = ORIGMARK; XPUSHTARG; RETURN; |