Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

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);
$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?

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (6)
As of 2023-12-03 01:54 GMT
Find Nodes?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?

    Results (20 votes). Check out past polls.