Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^2: Scope in use

by RonW (Parson)
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?

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2019-05-20 23:48 GMT
Find Nodes?
    Voting Booth?
    Do you enjoy 3D movies?

    Results (129 votes). Check out past polls.

    • (Sep 10, 2018 at 22:53 UTC) Welcome new users!