Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Keep It Simple, Stupid

Re: My coding guidelines

by cLive ;-) (Parson)
on Nov 25, 2002 at 18:56 UTC ( #215700=note: print w/ replies, xml ) Need Help??

in reply to My coding guidelines

Re point 15:

"Perl doesn't compile check the types of or even the number of arguments"

Am I missing something, or isn't that what prototypes are for?


cLive ;-)

Comment on Re: My coding guidelines
Re: Re: My coding guidelines
by thelenm (Vicar) on Nov 25, 2002 at 19:06 UTC
Re: Re: My coding guidelines
by jryan (Vicar) on Nov 25, 2002 at 19:18 UTC
    You are missing something, here are two examples:
    # prototypes only check arg format # i.e. (scalar/array/hash/code/glob and number of args) package Sample; sub stringify () { return ($_[0]->{data}) x $_[1] } package main; sub print_string($) { print $_[0]->stringify(1) } my $obj = bless ( {data=>"foo\n"}, 'Sample'); print_string($obj); # fine print_string(5); # uh oh... basic numbers don't have a stringify me +thod, # yet the arg passed the prototype since 5 is a sc +alar.
    And also:
    # methods don't check prototypes... at all. sub print_string_bad($) { print $_[0]->stringify() # Will pass the prototype, yet break since $_ +[1] will be # undef in stringify } print_string_bad($obj);

    Hence the reason for the general distaste for prototypes among the perl community. For most cases, they're pointless. They're only there so that you can call your own subs like perl-builtins.

Re: My coding guidelines
by Abigail-II (Bishop) on Nov 26, 2002 at 09:49 UTC
    You can't use prototypes to have the compiler check whether an argument is an integer, or an object of a certain type. Prototypes are less useful than you might think at first, and they are sometimes bloody nasty. The following doesn't do what you want:
    sub foo ($$) {....} my @bar = (1, 2); foo @bar;
    &foo isn't called with two arguments - even while @bar has two elements. Remove the prototype, and it will work as expected.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://215700]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (12)
As of 2014-04-16 10:22 GMT
Find Nodes?
    Voting Booth?

    April first is:

    Results (422 votes), past polls