in reply to cv = (irand(2))?"+":"-";

Have you read the error message? What part of the error message is unclear?

Maybe now it's time to familiarize yourself with Perl and the Perl syntax.

Can you explain in English what the expression is supposed to do that Perl complains about?

$av $cv $bv

Replies are listed 'Best First'.
Re^2: cv = (irand(2))?"+":"-";
by monorels (Novice) on Apr 05, 2016 at 08:55 UTC

    It works:

    sub example { do { $av = irand(11) + 10; $bv = irand(11); $cv = irand(2) ? "+" : "-"; } until ( !( $av - $bv < 0 || $av + $bv >= 20 ) ); print $av. $cv . $bv . " = \n"; }
      Your print could be written more succinctly as
      print "$av$cv$bv = \n";
      For delimiters that interpolate like double quotes, blackslashed characters are converted to the appropriate whitespace or control character and scalars ($) and arrays (@) are converted to their contents as strings. See Quote and Quote like Operators in perlop for detail.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Re^2: cv = (irand(2))?"+":"-";
by monorels (Novice) on Apr 05, 2016 at 08:40 UTC
    my $x = 1; my $y = 2; my $z = "+"; print $x $z $y;

    I do not understand where the error is.

      Variables cannot stand in for operators. Again, you're sort of just making syntax up as you imagine it ought to be. Reading perlintro may help you to bring your expectations in line with the reality of the language.


      Dave

        print eval "$x $z $y", $/; # :P

        monorels, don't really do that; it's snark here, not a good practice.

      my $x = 1; my $y = 2; my $z = "+"; print $x.$z.$y;

      I'm understand. <\p>