in reply to Prototyping Subs: Good,Bad,Indifferent

I hardly ever use prototypes. Why? Because I mainly program with modules and objects. And prototypes are useless with method calls, as the subroutine handling the method call is determined at run-time. And prototype checks occur at compile time. So if you're into OO programming, don't worry about prototypes (at least not in Perl 5 ;-)

The only use I've had for a prototype in my career, was with the share() subroutine in my forks module. That subroutine should be passed a single scalar, array or hash, but receive the appropriate reference as the parameter (without flattening). Take this example:

sub foo (\[$@%]) { print "received a $_[0]\n" } foo( $a ); foo( @a ); foo( %a );
will print something like:
received a SCALAR(0x107c84)
received a ARRAY(0x107d44)
received a HASH(0x107d68)
Without the prototype this wouldn't work at all. I guess this was one of the neat features added in 5.8.0.

On the other hand, I know of people who use prototypes on subroutines that are intended to be called as methods purely for the documentational value.

Hope this helps.

Liz