Popcorn Dave has asked for the wisdom of the Perl Monks concerning the following question:

Fellow monks,

The other night I was trying to finish debugging some code, and by a slip of the fingers accidently typed:

sub( bunch of code here )

instead of:

sub{ bunch of code here }

and it managed to crash ActiveState Perl on my win box with an invalid page fault, and on my linux box it gave me a segmentation fault.

My wonderment is why this didn't just return a syntax error at line whatever rather than it's behaviour. What is so special about using parenthesis that caused perl to freak?

Any ideas or is this some odd bug in perl that nobody ever really sees because they're such good typists?

Replies are listed 'Best First'.
Re: Odd behaviour by perl (boo)
by boo_radley (Parson) on Apr 26, 2002 at 06:34 UTC
    depending on the real details, you may have conned perl into thinking you wanted a prototype for your sub, causing a great weeping and gnashing of teeth.
    prototypes are usually reviled, and look like sub baz($$) {... real code ...}
    the ($$) bit means baz will accept 2 scalar values only. If you have a 2 element array, it'll be forced into scalar context automagically (and autoevilly). If nothing's in the parens, the sub will take no arguments, no how.

    here's some happy fun examples :
    use strict; sub foo ($) {return shift} sub foo2 ($$) {return $_[0]+$_[1]} sub foo3 () {100} my @bax=(10,20); print join "\n",foo 20,3, foo2 10,20; print "\n"; print foo3; print "\n"; print eval (foo2 @bax,1); print "\n";
    Update :
    Well, I guess I shouldn't post things in the middle of the night without my thinking brain dog nearby, as this node probably makes no sense unless one already knows about prototypes. The point of the post was to say "don't put code into a prototype", but I don't think that got communicated. To learn more about prototypes, hit perlsub.
Re: Odd behaviour by perl
by abstracts (Hermit) on Apr 26, 2002 at 06:22 UTC
Re: Odd behaviour by perl
by particle (Vicar) on Apr 26, 2002 at 12:23 UTC
    can you strip it down to the bare bones and post it? i'm curious as to what you've done. my attempts haven't yeilded anything resembling a page fault.

    ~Particle accelerates