Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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
Node Status?
node history
Node Type: note [id://586350]
[Corion]: LanX: Yes, that's the main problem - you have lots (and lots) of workarounds in various places and stages of the processing, and to clean that mess up requires action across the complete codebase. And it's almost impossible to do it piece-by-piece
Corion is in a similar situation.#

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (12)
As of 2017-01-16 14:10 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (150 votes). Check out past polls.