http://qs321.pair.com?node_id=586350


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:

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...