in reply to Newbie flabbergasted by string compare results
An interesting question (and a potential breadcrumb-path to enlightenment) would have been to ask what was happening to all those newlines. Three print statements in a row with cmp, each with a newline, and the output is "-11-1". Wha...?!?
In any event, using the O and B::Deparse modules allows you to see what Perl thinks about the code you have written.
>perl -wMstrict -MO=Deparse,-p -e "my $c = shift @ARGV; ;; sub main() { print qq{cmp Compare:\n}; print 'a' cmp 'b'.qq{\n}; print 'b' cmp 'a'.qq{\n}; print 'a' cmp 'a'.qq{\n}; ;; print 'a' cmp 'b'.$c; } " BEGIN { $^W = 1; } use strict 'refs'; (my $c = shift(@ARGV)); sub main () { use strict 'refs'; print("cmp Compare:\n"); print((-1)); print(1); print((-1)); print(('a' cmp ('b' . $c))); } -e syntax OK
As you see, most of the cmp expressions don't even survive compilation, being reduced to compile-time constants (because that's essentially how they started out). Only the last print statement gives Perl something to chew on at run time, and it's possible to clearly see there the precedence of operator evaluation.
|
|---|