Chapter 12. Subroutines

Subroutines need to be declared, i.e., specified how they should be called, and defined, i.e., specified what they should do when called.

sub name [ ( proto ) ] [ attributes ]

Declares name as a subroutine, optionally specifying the prototype and attributes. Declaring a subroutine is optional, but allows the subroutine to be called just like Perl’s built-in operators.

sub [ name ] [ ( proto ) ] [ attributes ] block

Defines subroutine name, with optional prototype and attributes. If the subroutine has been declared with a prototype or attributes, the definition should have the same prototype and attributes. When name is omitted, the subroutine is anonymous and the definition returns a reference to the code.

When a subroutine is called, the statements in block are executed. Parameters are passed as a flat list of scalars as array @_. The elements of @_ are aliases for the scalar parameters. The call returns the value of the last expression evaluated. wantarray can be used to determine the context in which the subroutine was called.

Subroutines that have an empty prototype and do nothing but return a fixed value are inlined, e.g., sub PI() { 3.1415 }.

attributes are introduced with a : (colon). The following attributes are currently implemented:

method

The subroutine is a method.

locked

Lock this subroutine against concurrent access.

lvalue

The subroutine returns a variable that can be assigned to.

There are several ways to call a subroutine.

name ( [ parameters ] )

The most common way. The parameters are passed by reference as array @_.

&name ( [ parameters ] )

Prototype specifications, if any, are ignored.

&name

The current @_ is passed directly to the called subroutine.

name [ arguments ]

If the subroutine has been declared, or defined, it may be called as a built-in operator, without parentheses.

In all cases, name can be an expression yielding a reference to a code object. If so, you can also use &${expr}( [ arguments ] ) or ${expr}->( [arguments] ).

caller [ expr ]

Returns a list (package, file, line, . . . ) for a specific subroutine call. caller returns this information for the current subroutine, caller(1) returns this information for the subroutine that called this subroutine, etc. Returns false if no caller.

defined &name

Tests whether the named subroutine has been defined (has a body).

do name list

Deprecated form of &name.

exists &name

Tests whether the named subroutine has been declared, either in full (with a body) or with a forward declaration.

goto &name

Substitutes a call to name for the current subroutine.

prototype name

Returns the prototype for the named function as a string, or undef if the function has no usable prototype.

return [ expr ]

Returns from a subroutine, eval, or do file with the value specified. Without expr, returns undef in scalar context and an empty list in list context.

Special Subroutines

Special subroutines are user defined, but are called by Perl while processing the program. They can be used to change the order in which parts of a program are executed.

[ sub ] AUTOLOAD block

The code in block is executed when the program calls an undefined subroutine. $AUTOLOAD contains the name of the called subroutine, and @_ contains the parameters.

[ sub ] BEGIN block

The code in block is executed immediately when compilation of the block is complete.

[ sub ] CHECK block

CHECK blocks are executed in reverse order when the compilation of the program finishes.

[ sub ] END block

END blocks are executed in reverse order when the Perl interpreter terminates. Inside the END blocks, $? contains the status with which the program is going to exit.

[ sub ] INIT block

INIT blocks are executed immediately before the Perl interpreter starts executing the program.

perlsub.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset