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:
August 5: Social gathering
Next Installfest:
TBD
Latest News:
Jul. 4: July, August and September: Security, Photography and Programming for Kids
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: A different approach to: Can I declare $main::...
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] Perl: A different approach to: Can I declare $main::...



On Tue, Aug 07, 2001 at 11:49:12AM -0500, Jay Strauss wrote:
> What I really want to do, is perform some housekeeping and variable
> initialization within a subroutine (so that I can stick it at the bottom of
> the source and not look at it all the time).  So I've been monkeying with:
> 
> use strict;
> 
> my %arg = (quiet=>"yep");
> housekeeping(\%arg);
> 
> sub housekeeping
> {
>    print keys %{$_[0]}, "\n";
>    my %arg;
>    *arg = \%{$_[0]};
>     print keys %arg, "\n";
> }

You would need local *arg, not my %arg - but don't do it.

local *arg declares *arg in the global namespace, and makes a local
version of it (somewhat counterintuitive).  I've messed around with
this a lot.  So this means that there'll be a global mapping
$arg, %arg, @arg and &arg, just to accomplish aliasing.  This is,
needless to say, very kludgeful unless you're only dealing with
globals anyway (which, in itself, is pretty kludgeful).

Perl 6 will apparently have an ability to alias locals as well, but in
the meantime, I suggest sticking with references.  FWIW, though, the
above is fairly hard to read - I'd prefer '$args = shift;' at the top
of the subroutine, and then use %{$args} or $args->{...} to use the
reference.

Micah



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:
O'Reilly and Associates
For numerous book donations.