l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
November 4: Social gathering
Next Installfest:
TBD
Latest News:
Oct. 24: LUGOD election season has begun!
Page last updated:
2001 Dec 30 17:07

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] Perl: Can I declare $main::variable within a subroutine,
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] Perl: Can I declare $main::variable within a subroutine, while using strict?



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" <ted@psyber.com>
To: <vox-tech@franz.mother.com>
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


LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.