I think B::Deparse gets it wrong -- as it sometimes does -- when you add -p:
This is confirmed by the more low-level output of B::Concise:
$ perl -MO=Concise,-exec, -e 'print ( two + two == five ? "true" : "fa
+lse" )'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s
4 <$> gv(*two) s
5 <1> rv2gv sKR/1
6 <$> const(PV "two") s/BARE
7 <$> const(PV "five") s/BARE
8 <2> eq sK/2
9 <|> cond_expr(other->a) lK/1
a <$> const(PV "true") s
goto b
d <$> const(PV "false") s
b <@> print vKS
c <@> leave[1 ref] vKP/REFC
-e syntax OK
It's easy to see from this output that the first two is treated as a typeglob; a filehandle. The second two and the five are treated as barewords; constants in this case, which are then compared to one another. They evaluate to the same constant defined value, which is probably an empty string, equating to 0 for the purpose of numeric equality. So "true" will result, but it's printed to a filehandle that hasn't been attached to anything.
| [reply] [d/l] [select] |
| [reply] [d/l] [select] |
| [reply] |
I can't test ATM You gotta stop saying that :)
Contrary to AnoMonk I doubt space matters. Sure it does, it matters how Deparse places the space, because it matters to perl That is exactly as deparsed with -p, behaves exactly like the original
| [reply] [d/l] |