Is there ever a scenario when it's preferrable to use the &
There is one dramatic difference that occurs when you call the function without a parameter list:
#! /usr/local/bin/perl -w
use strict;
sub inner {
print " inner: $_\n" for @_;
}
sub outer {
print "outer: $_\n" for @_;
inner;
print "\n";
}
sub outer_amp {
print "outer_amp: $_\n" for @_;
&inner;
print "\n";
}
outer( qw/ vroon gukguk faba / );
outer_amp( qw/ foomp tweedle zachitty / );
__RESULTS__
outer: vroon
outer: gukguk
outer: faba
outer_amp: foomp
outer_amp: tweedle
outer_amp: zachitty
inner: foomp
inner: tweedle
inner: zachitty
When using the &inner variant, whatever remains of @_ in the calling routine is passed to the called routine. The only time it's really useful is when doing out-of-the-ordinary stuff like autoloading. In general you should avoid it. It leads to bad surprises
PS: metasyntactic function call arguments courtesy of BooK's Acme::MetaSyntactic module, the donmartin theme.
- another intruder with the mooring in the heart of the Perl
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|