in reply to Re: Why isn't return removed from optree?
in thread Why isn't return removed from optree?

Don't know, but it wouldn't be the only one. For example, list is a no-op in list context

PP(pp_list) { dVAR; dSP; dMARK; if (GIMME != G_ARRAY) { if (++MARK <= SP) *MARK = *SP; /* unwanted list, return last item */ else *MARK = &PL_sv_undef; SP = MARK; } RETURN; }

so why is it optimized away for being used in list context?

>perl -MO=Concise -e"$x = (1,2)" 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 7 <2> sassign vKS/2 ->8 5 <@> list sKP ->6 3 <0> pushmark v ->4 - <0> ex-const v ->4 4 <$> const[IV 2] s ->5 - <1> ex-rv2sv sKRM*/1 ->7 6 <#> gvsv[*x] s ->7 -e syntax OK >perl -MO=Concise -e"@x = (1,2)" a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 9 <2> aassign[t3] vKS ->a - <1> ex-list lKP ->6 3 <0> pushmark s ->4 4 <$> const[IV 1] s ->5 5 <$> const[IV 2] s ->6 - <1> ex-list lK ->9 6 <0> pushmark s ->7 8 <1> rv2av[t2] lKRM*/1 ->9 7 <#> gv[*x] s ->8 -e syntax OK

I would expect some consistency.