I've read about closers (never used them, but think I understand them). I
think I'm going to attack my problem a different way. I don't want to have
to prefix everything with $main::, and maybe I can do the use vars qw( ),
but now you've scared me.
Jay
----- Original Message -----
From: "Ted Deppner" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, August 07, 2001 9:51 AM
Subject: Re: [vox-tech] Perl: Can I declare $main::variable within a
subroutine, while using strict?
> also, beware of "closures". if you're programming in modperl for
> instance, your code will be subjected to "closure" behavior, which can
> make things odd.
>
> So, use the suggestion below ALWAYS. The var is always $PACKAGE::var,
> $main::tmp in your case.
>
> The specific thing that'll screw you up in closures is making the
> assumption that $main:: is always $main::... ie..
>
> use strict;
> use vars qw/$tmp/;
> print $tmp;
>
> sub blah {
> print $main::tmp;
> }
>
> this code (baring any stupid typos) would compile and run just fine in
> most cases... but in the closure case, the first $tmp _MAY_ wind up in
> some other package -- $tmp would not necessarily be $main::tmp.
>
> There's more about this at the modperl site, but there are other places
> it'll grab you rather than just modperl. the important thing is if you
> start doing variables outside your use strict scope, make sure you always
> reference the variable by the full name you've given it.
>
> I'd also suggest you adopt a $mainvar:: (or perhaps use a hash reference
> like $mainvar::href->{myvar}) style so you never accidentally walk over a
> variable name. Globals are dangerous!
>
> On Tue, Aug 07, 2001 at 08:48:49AM -0400, Mike Simons wrote:
> > yes,
> >
> > --- zap.pl-orig Tue Aug 7 00:55:12 2001
> > +++ zap.pl Tue Aug 7 00:54:54 2001
> > @@ -5,3 +5,3 @@
> >
> > -print "$tmp\n";
> > +print "$main::tmp\n";
> >
> >
> > On Mon, Aug 06, 2001 at 02:46:33PM -0500, Jay Strauss wrote:
> > > > cat ./tmp
> > > #!/usr/bin/perl -w
> > > use strict;
> > >
> > > create();
> > >
> > > print "$tmp\n";
> > >
> > > sub create {
> > >
> > > $main::tmp = 1;
> > > }
> > >
> > > > ./tmp
> > > Global symbol "$tmp" requires explicit package name at ./tmp line 6.
> > > Execution of ./tmp aborted due to compilation errors.
>
> --
> Ted Deppner
> http://www.psyber.com/~ted/
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com