in reply to Re: Martin Brown book page 33
in thread Martin Brown book page 33

For extra credit, explain why it doesn't print "23First1Second1" - which would seem to be the most obvious result.

Because the arguments to print are all evaluated first, then printed. ie, it's effectively:

@args = (2,3,first,second); print @args;

So 'first' and 'second' are run (generating output), before the print command w/ the list is performed.

Similarly, foreach (&func1, &func2) { ... } will run both 'func1' and 'func2' before starting the loop:

foreach ( &func1, &func2 ) { print "Looping : $_"; } sub func1 { print "func1 called\n"; return "func1 return val\n"; } sub func2 { print "func2 called\n"; return "func2 return val\n"; }