Now I'm all flabbergasted. What's going on there? As it doesn't print the '0's, it seems the only thing that gives the right number of '1's is "Less than or equal to". Everything else seems to do something unexpected. What did I do wrong here?

The first answers correctly note the precedence issues. Your script does not print '0's because the boolean operators (i.e., everything except for cmp) are returning '' for the boolean false value.

To get around both issues, and learn about eval, try this instead:

#!/usr/bin/env perl use 5.012; use warnings; use strict; my @perm = ( [qw/a b/], [qw/b a/], [qw/a a/] ); for my $op (qw/cmp eq ne lt le gt ge/) { for my $expr (map { "'$_->[0]' $op '$_->[1]'" } @perm) { printf "%s == %s\n", $expr, eval($expr) eq '' ? "''" : eval($e +xpr); } }

Yes, I do the eval twice; normally I would avoid that, but here there is no side effect by design and the penalty is small.

Update: Add missing { back in. (Thanks Athanasius!)


In reply to Re: Newbie flabbergasted by string compare results by rjt
in thread Newbie flabbergasted by string compare results by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.