Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: Scope in use

by RonW (Vicar)
on Sep 06, 2017 at 19:31 UTC ( #1198784=note: print w/replies, xml ) Need Help??


in reply to Re: Scope in use
in thread Scope in use

You are mixing compile-time and run-time behavior.

I respectfully disagree.

my does have both compile time and run time effects. my always has a compile time effect to declare the presence of one or more variables. It also has a run time effect. Before a block of code is run, it is compiled, thus the variables are declared so the rest of the block can compile. When the block is run, the run time effect of my is applied.

In this case, the compiler is complaining "Global symbol "$lib" requires explicit package name" which also means that there isn't a declaration in scope. This implies the my in the use statement is in a different scope.

When you remember that use X LIST is equivalent to BEGIN { require X; X->import(LIST)' }, this makes sense.

If you don't know that (or forget it), it can/will be a surprise.

In the OP's example, the run time effect is not the problem.

The following works because my does have an effect at compile time:

my $lib; # $lib declared at file scope use lib $lib = '.'; # file-scope $lib accessed in "use scope" print $lib; # file-scope $lib accessed in file scope

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1198784]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (8)
As of 2017-12-14 19:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (408 votes). Check out past polls.

    Notices?