In order to print something, it needs to evaluate the values of what it's trying to print. For example, print ($foo, length($foo)); evaluates what $foo's value is and what length($foo)'s value is, then prints them.
In the Camel's example, exit gets called, with the intention of determining its value, but when you call exit, you do just that: exit.
| [reply] [d/l] [select] |
print($foo, exit); # Obviously not what you want.
The print function is called with two arguments,
$foo, and exit. Both
will be evaluated to get at their values, and these
values will then be sent to the print function
to print out. That is, $foo evaluates
to whatever is stored in it (say, the string "hi"), and then exit
is evaluated by calling the exit function,
which aborts the program. So print never
gets a chance to print anything.
This is rather basic. More interesting is why this prints something:
print ($foo), exit;
Here the expression consists of a call to the print function with one argument, and then a comma, and
then a call to the exit function. As a
comma operator evaluates its left argument, throws the
return value away, and the evaluates its right argument,
first the call to print($foo) is evaluated,
resulting in a call to print, this in turn
will evaluate $foo and send its value to the
print function (making it print out something like "hi"), and then second, the
call to exit is evaluated, aborting the program.
You should read
Structure and Interpretation of Computer Programs.
Christian Lemburg
Brainbench MVP for Perl
http://www.brainbench.com | [reply] [d/l] [select] |
print needs to evaluate the function to see what is
returned to be printed
Not this fragment is useful, but you can see why
one would want the function to return a value first.
use strict;
use warnings;
sub yaya {
return " ha \n";
}
my $foo = "bar";
print ($foo, yaya);
Update:Ok. Took a look at
that section of the Camel.
It's all in the precedence of arguments and functions
can be arguments. parens can modify this, but
you may need a unary plus to avoid some mistakes
It might be worth reading that section a few more times. | [reply] [d/l] |