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

Re: use vars in a require()d file

by athomason (Curate)
on Mar 12, 2001 at 05:58 UTC ( #63715=note: print w/replies, xml ) Need Help??

in reply to use vars in a require()d file

From perlman:lib:vars:
Unlike pragmas that affect the `$^H' hints variable, the `use vars' and `use subs' declarations are not BLOCK-scoped. They are thus effective for the entire file in which they appear. You may not rescind such declarations with `no vars' or `no subs'.

Note the phrase entire file. So, when you declare $qux, $quo, and $zip in, perl has already forgetten that they were declared via use vars by the time you get around to reading them in However, the symbol table is more permanent, which is why you can still access them by explicitly specifying package main.


Whoops, guess you shouldn't always believe the docs... it does look like the behavior follows chromatic's explanation.

Replies are listed 'Best First'.
Re (tilly) 2: use vars in a require()d file
by tilly (Archbishop) on Mar 12, 2001 at 07:58 UTC
    chromatic is right. However the documentation for vars should be updated to make it clear that a vars declaration is actually package scoped, not file scoped. In other words that global has been declared, and will be considered declared in every file you encounter from then on as long as they are all in the same package. Of course if you are following good Perl tradition and writing lots of modules with private packages, the issue won't come up...

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (2)
As of 2021-10-22 06:03 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (85 votes). Check out past polls.