cpan you have to see

Peter Sergeant pete at clueball.com
Wed Dec 12 19:09:55 GMT 2012


On Wed, Dec 12, 2012 at 6:14 PM, Gareth Harper <spansh+london at gmail.com>wrote:

> On 12 December 2012 17:57, Joseph Werner <telcodev at gmail.com> wrote:
> > On Wed, Dec 12, 2012 at 12:45 PM, Gareth Harper <spansh+london at gmail.com>
> wrote:
> >
> > PBP and I disagree with you on this one, Gareth. When a sub does a
> > "return 0;" to a list context, that is interpreted as true.  A bare
> > "return;" is best practice.
> >
>
> I stand corrected.
>

Don't stand corrected too quickly - the idea that you should always use a
bare *return()* is far from universally accepted - you can bite yourself
just as easily in reverse by using bare return, and getting an empty list
where you expected a false or undefined value:

https://gist.github.com/4270506

The boolean argument is reaching, at best. Perl programmers frequently use
numeric 0 as a false value, and yet no-one is saying you should write code
like:

sub lock_count {
if ( $lock_counter ) {
 return $lock_counter;
} else {
 return;
}
}

"Just in case" someone has decided to take your input in to an array,
before asking if lock_count is true.

If you're using a bare return then all your returns should be
*wantarray*dependent, or you're making the code even less predictable
- making the
*return* of an undefined value the only context-dependent *return* in a sub
is crazy talk!

The simple rule here is: write functions that return either a list, or a
scalar, and not both, and be explicit in your function documentation which
you're expecting to return.

-P


More information about the london.pm mailing list