This week, Perl 101 introduces you to subroutines and teaches youhow to structure your code for maximum reusability. Also included: returnvalues, my() and local() constructs, and a marriage proposal.
Of course, defining a subroutine is only half of the puzzle - for it to be of any use at all, you need to invoke it. In Perl, this is accomplished by calling the subroutine by its name, as we've done in the last line of the example above. When invoking a subroutine in this manner, it's usually a good idea to precede the name with an ampersand [&]- this is not essential, though, and the following would also work:
#!/usr/bin/perl
# define a subroutine
sub greatest_movie
{
print "Star Wars\n";
}
# main program begins here
print "Question: which is the greatest movie of all time?\n";
# call the subroutine
greatest_movie;
# ask another question
print "Question: which movie introduced the world to Luke Skywalker, Yoda
and Darth Vader?\n";
# call the subroutine
greatest_movie;
However, it's good programming practice to precede the name
of a Perl subroutine with an ampersand when invoking it - this helps to differentiate the Perl subroutine from array or scalar variables that may have the same name, and from pre-defined Perl functions. For example, consider this piece of code, in which we've defined a subroutine called &print, which also happens to be the name of the in-built Perl print() function:
#!/usr/bin/perl
# define a subroutine
sub print
{
print "Ross\n";
}
# main program begins here
print "Question: which Friend once had a pet monkey?\n";
# call the subroutine
print;
In this case, when you run the program, you'll get the
following:
Question: which Friend once had a pet monkey?
Here, Perl assumes that the line containing the print
statement is a call to the in-built Perl print() function, rather than the user-defined Perl &print subroutine. To avoid this kind of error, you should either avoid naming your subroutines after reserved words, or precede the subroutine call with an ampersand. In the example above, if you changed the last line from
print;
to
&print;
Perl would understand the subroutine call correctly, and
display the desired output.
Question: which Friend once had a pet monkey?
Ross
This article copyright Melonfire 2000. All rights reserved.