in reply to print command runs after call to subroutine
Because the evaluation order is different from the order in your source code. To construct the argument passed to your final print line, Perl needs to run the display subroutine to get at its return value. The display subroutine prints out some stuff and returns nothing. This result is then appended to the final print statement.
If you want a different order of execution, consider using one print statement and a simple call to display, or even better, consider making display return a string instead of printing it.
sub display { my( $result ) = ''; foreach( @_ ) { $result = $result . "$_\n"; }: return $result }
Also, your style of calling display is somewhat fraught with dangers. I recommend using the more common style of simply using the subroutine name with parentheses instead:
display( 1..10 );
Using &display() brings you close to the danger of using &display;, which has the subtle side-effect of using the (parent callers) @_ as arguments instead of passing no arguments.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: print command runs after call to subroutine
by Fuhrer_of_Flapjacks (Initiate) on Oct 19, 2016 at 12:54 UTC | |
by Corion (Patriarch) on Oct 19, 2016 at 13:12 UTC |