Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re: My coding guidelines

by cLive ;-) (Prior)
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 ;-)

Replies are listed 'Best First'.
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]
[erix]: and now you are agnostic?
[james28909]: arunbear, your picking bits of history to fit your own narrative. right now, humans are smarter than in any of those times.
[james28909]: in order for there to be a mutation, there has to be a universe with laws setup that even allow a mutation.
[james28909]: everything past the first two things you piked from my posts are irrelevant to me and my beliefs. they are side effects.
[james28909]: two or three. if it has to do with how humans are handling said situations, then that is after they were able to evolve into those problems. agnostic means only believe with evidence. i took that from a tyson video
[james28909]: and it seems that racism suggest that there is indeed a better race, but that is for evolution to decide
[1nickt]: "right now, humans are smarter than in any of those times": define "smart"
[erix]: ah, now you're appraoch downvote-territory ;)

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (12)
As of 2017-12-15 14:55 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (433 votes). Check out past polls.