Further to Your Mother's reply: Because Perl has no main() function and allows intermixing function calls and definitions, strange things can happen. Better by far, IMHO, to have someone put in a function call and scratch their head (even for quite a while) about why it is never executed than to have the code compile and apparently run correctly for hours/days/weeks/... before realizing that, hey, something ain't right! Here's an (admittedly rather contrived) example of goofy behavior:
c:\@Work\Perl\monks>perl -wMstrict -le
"S(3);
T();
S(9);
T();
;;
exit_here_to_avoid_weirdness();
;;
my $x = 42;
sub S { $x = $_[0]; printf qq{in S: x == $x }; T(); }
;;
sub T { ++$x; print qq{in T: x == $x}; }
;;
sub exit_here_to_avoid_weirdness { ;;; }
T();
"
in S: x == 3 in T: x == 4
in T: x == 5
in S: x == 9 in T: x == 10
in T: x == 11
in T: x == 43
Is that 43 result from the last call to
T() correct? Maybe better not to make it at all:
c:\@Work\Perl\monks>perl -wMstrict -le
"S(3);
T();
S(9);
T();
;;
exit_here_to_avoid_weirdness();
;;
my $x = 42;
sub S { $x = $_[0]; printf qq{in S: x == $x }; T(); }
;;
sub T { ++$x; print qq{in T: x == $x}; }
;;
sub exit_here_to_avoid_weirdness { exit; }
T();
"
in S: x == 3 in T: x == 4
in T: x == 5
in S: x == 9 in T: x == 10
in T: x == 11
(Of course, it would be nice to have a "code not reachable" message, but that's life.)
Give a man a fish: <%-{-{-{-<