Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^3: Why am I getting "premature end of script header"? - &subroutine calling style

by imp (Priest)
on Nov 27, 2006 at 22:46 UTC ( #586350=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Why am I getting "premature end of script header"? - eval { use }
in thread Why am I getting "premature end of script header"?

This would be sufficient:

BEGIN { if( eval "use fakemodule; 1;") { print STDERR "Loaded fakemodule"; } else { print STDERR "Couldn't load fakemodule."; } }
Don't put BEGIN blocks inside a subroutine, they won't do what you want.

Don't print in the BEGIN block, it will come before the Content-type header

Calling a subroutine with the '&a' syntax has the following effects, from perlsub:

  • &NAME(LIST); # Circumvent prototypes.
  • &NAME; # Makes current @_ visible to called subroutine.
In your code you used the &a; form, which would make the current @_ visible to the called subroutine. For example:
first(1,2,3); sub first { &second; } sub second { print for @_; } # Output is 123
Although it isn't relevant for this particular case it is still good to be aware of the prototype circumvention behaviour. Here is an example:
use strict; use warnings; use Data::Dumper; sub pro(\@) { print Dumper \@_; } my @list = (1,2,3); pro(@list); &pro(@list);
Output:
$VAR1 = [ [ 1, 2, 3 ] ]; $VAR1 = [ 1, 2, 3 ];


Comment on Re^3: Why am I getting "premature end of script header"? - &subroutine calling style
Select or Download Code
Re^4: Why am I getting "premature end of script header"? - eval { use }
by lokiloki (Beadle) on Nov 27, 2006 at 22:59 UTC
    thank you... so the takeaway message is that I should call subroutines via subroutine; and not &subroutine;? this must be a new thing? because the Perl book I have (admittedly the first edition o'reilly one) says that i should call subroutines with the ampersand...?
      Aye, the &subroutine; style is optional in any modern perl. I can't recall what version that changed in, but it was a fairly long time ago.
        I suppose using the & was helpful to me also because it let me know when I was calling something i had personally created, versus calling a builtin function or something from another module...

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2015-07-03 21:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (56 votes), past polls