Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Do you know where your variables are?
 
PerlMonks  

Re (tilly) 5: No excuses about not using CGI.pm

by tilly (Archbishop)
on May 04, 2001 at 01:11 UTC ( #77779=note: print w/ replies, xml ) Need Help??


in reply to Re: Re (tilly) 3: No excuses about not using CGI.pm
in thread variables not posting?

It is silent for me in 5.005_03.

But try the following:

mysub(1); BEGIN { package Foo; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(mysub); sub mysub ($) { print "mysub: @_\n" }; } BEGIN { warn("About to import\n"); Foo->import(); warn("Imported\n"); }
I suspect that the warning comes when it imports and realizes that it has already parsed code whose meaning is being changed by the prototype. And the way I said that should go a long way to answering your question.

BEGIN blocks are executed once the BEGIN block is parsed. That means that they run before later code is parsed, and after prior code is already parsed. This is also why BEGIN blocks run in the order they appear in the file...


Comment on Re (tilly) 5: No excuses about not using CGI.pm
Download Code
Re: Re (tilly) 5: No excuses about not using CGI.pm
by MeowChow (Vicar) on May 04, 2001 at 01:22 UTC
    Strange, I only see this warning in Win32 AS Perl 5.6; it's not present under Linux 5.6.1/5.00503 or even Cygwin 5.6. With your variation, the warning comes out afterwards, so it looks as if the first line is the problem:
    About to import Imported main::mysub() called too early to check prototype at C:\Projects\GPerl +\Test\g1.pl line 1. mysub: 1
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
      Then it is a run-time check.

      BTW the fact that ActiveState's Perl does not correspond to things built from source bothers me...

      On the contrary, the warning does occur under perl 5.6.1 on Linux, as well as perl 5.6.0 and perl 5.7.1. Are you sure you had warnings turned on for all your tests?

      The warning doesn't occur in 5.005_03 because the warning wasn't implemented until 5.6.0. :)

      Anyway, this warning is actually produced at the end of the compile phase, after the entire script has been compiled:

      warn "About to call\n"; mysub(1); warn "Called\n"; BEGIN { package Foo; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(mysub); sub mysub ($) { warn "mysub: @_\n" }; } BEGIN { warn("About to import\n"); Foo->import(); warn("Imported\n"); } CHECK { warn "Done compiling.\n" } INIT { warn "Running.\n" } __END__ About to import Imported main::mysub() called too early to check prototype at tmp.pl line 4. Done compiling. Running. About to call mysub: 1 Called
        Agh! Indeed I forgot to enable warnings. That was pretty damn stupid of me.
           MeowChow                                   
                       s aamecha.s a..a\u$&owag.print

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (11)
As of 2014-04-24 12:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (565 votes), past polls