in reply to Re: Order of 'use' statement in Data::Dumper
in thread Order of 'use' statement in Data::Dumper

I don't think it is exactly so. When execution reach the print line, Data::Dumper is available. If you try the code from my previous example (I tested it, at last) you'll see that it works.

The problem is that at compile time, the Dumper sub is not imported till use Data::Dumper is reached; so "print Dumper something", without parenthesis, is interpreted as if Dumper were a filehandle to print to.

Rule One: "Do not act incautiously when confronting a little bald wrinkly smiling man."

Replies are listed 'Best First'.
Re^3: Order of 'use' statement in Data::Dumper
by jrsimmon (Hermit) on Jul 16, 2009 at 16:45 UTC
    That's true (and something I didn't know psini++), but I think the op was expecting
    use Module;
    to be equivalent with
    BEGIN{require Module;}
    , which it is not.

      Sorry but, in this example at least, it is equivalent.

      Both use and BEGIN are executed at compile time, but only when the compiler reach their position. So:

      use strict; use warnings; my %test_hash = ( a => { b=> 'c' } ); print Dumper %test_hash; BEGIN{require Data::Dumper; Data::Dumper->import}

      gives the same error as above where

      use strict; use warnings; my %test_hash = ( a => { b=> 'c' } ); print Dumper(%test_hash); BEGIN{require Data::Dumper; Data::Dumper->import}

      works, for exactly the same reason.

      Rule One: "Do not act incautiously when confronting a little bald wrinkly smiling man."

        You are right -- I stand corrected.