http://www.perlmonks.org?node_id=139566


in reply to using strict and functions

You can localize them to the functions (the 'BEGIN' is so that any initializations to the variables get done no matter where you place these functions in the program):
BEGIN { my ($var1, $var2) = ("this", "that"); sub sub1 { # use $var1, $var2 } sub sub2 { # use $var1, $var2 } }
Update: It's hard to tell what you really want or need from your description, so its a good thing there are lots of good answers here..

Replies are listed 'Best First'.
Re(2): using strict and functions
by dmmiller2k (Chaplain) on Jan 18, 2002 at 09:04 UTC

    This turns sub1 and sub2 into closures (see 'What's a closure?'). While it is not always necessary to use BEGIN blocks, without them (i.e. normal blocks), declaration order becomes significant.

    Update: A trick I use occasionally is to declare a set of lexical variables in a BEGIN block along with access functions. Within the program, only the access functions are visible.

    BEGIN { my ($var1, $var2, $var3); my @array1; my %hash1; sub var1 { $var1 = $_[0] if @_; $var1 } sub var2 { $var2 = $_[0] if @_; $var2 } sub var3 { $var3 = $_[0] if @_; $var3 } # for arrays and hashes, call in scalar context and # dereference to manipulate contents sub array1 { wantarray ? @array1 : \@array1 } sub hash1 { wantarray ? %hash1 : \%hash1 } }

    Of course, rather than hand code access functions for every variable, I typically define a hash containing my variables as keys, and an AUTOLOAD to define access functions dynamically on first use.

    dmm

    If you GIVE a man a fish you feed him for a day
    But,
    TEACH him to fish and you feed him for a lifetime