herbert breunung <deirdre_s...@web.de> writes:

> Am 15.07.2010 11:15, schrieb Johan Vromans:
> > Calling subroutines with & is explictly advised
> > against, and with reason.
> 
> which reason?

You already hint at parameters... Calling a subroutine with & bypasses
context coercion and also passes the caller's @_ which can lead to
surprising results.

sub foo {
    &amIstillalive;
    my ($arg) = @_;
    print( "arg = $arg\n" );
}

sub amIstillalive {
    print( shift() ? "got something " : "" );
}

foo( 24, 25, 26 );      # prints "got something 25"

> in any other case I would say you right, but here are no parameters
> involved

Wrong. You pass the caller's @_ to the subroutine so it possibly
*does* get arguments.
Also, once you start calling some subs with & it could become a
habit to use & for other subroutine calls as well.

You teach Perl, so you know that it is important to use a consistent
approach throughout. Perl trainees will be much confused if you mix
foo() and &foo in your code.

-- Johan

Reply via email to