Perl Tutorials - Herong's Tutorial Examples
Dr. Herong Yang, Version 5.00

Declaring and Calling Subroutines

This section describes some important rules about declaring and calling user defined subroutines: parameters are passed as a list value stored in the special local variable @_; subroutines are normally called with their name prefixed with &.

Like many other programming languages, Perl allows you to define and call your own subroutines. But some of Perl subroutine rules are unusual comparing to other languages.

1. All parameters of a subroutine call are passed as a single list of scalars. If a list (array or hash) is used in a subroutine call as a parameter, it will be exploded into multiple parameters with its elements.

2. All parameters will be received as elements in a local array variable named as @_.

3. All parameters are passed as aliases. If the value of a parameter is modified inside a subroutine, the value of the corresponding variable in the calling code is also modified. But if the calling code is passing a literal as a parameter, then you can not modify the value of this parameter. You will get an execution error.

4. All subroutines return values. So in Perl, subroutines are really functions. If a subroutine is ended with no explicit return statement, the value of the last expression will be returned.

5. All return values are passed back to the caller as a single list of scalars. If a list (array or hash) is used as a return value, it will be exploded into multiple return values with its elements.

6. There are several ways to call a subroutine:

  • "&sub_name(list)" - Calling a subroutine with the specified list of parameters.
  • "sub_name(list)" - Same as "&sub_name(list)".
  • "sub_name list" - Same as "&sub_name(list)", if sub_name is pre-declared as a subroutine.
  • "sub_name" - Same as "&sub_name()", if sub_name is pre-declared as a subroutine.
  • "&sub_name" - Same as "&sub_name(@_)". This one is very unusual. Be careful.

Sections in This Chapter

Declaring and Calling Subroutines

SubParamList.pl - Example on Parameter List

SubParamAlias.pl - Example on Parameters as Alias

SubReturnValue.pl - Example on Return Values

SubCalling.pl - Example on Calling Formats

Dr. Herong Yang, updated in 2008
Declaring and Calling Subroutines