Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
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 ( [id://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 ];

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://586350]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2024-04-24 03:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found