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.
|