[Chicago-talk] More than just S&M in perl...
Steven Lembark
lembark at wrkhors.com
Tue Sep 7 16:47:29 CDT 2004
You can now be much more strict as well.
Or should I start in with NEXT:: of kin jokes instead?
In any case:
5.8.5 came out with Symbol in the standard package.
Rather minimalist interface and doc's make it harder
to use, but it's worth getting into. Main use is allowing
you to generate globs on the fly without resorting to
no strict refs.
For example, I just used it to purge the last unstricts
from NEXT::init.
For example:
my $ISA = *{qualify_to_ref 'ISA', $caller}{ARRAY};
my $init = qualify_to_ref 'init', $caller;
my $meta = qualify_to_ref 'meta', $caller;
unshift @$ISA, __PACKAGE__;
*$meta = $ref;
*$meta = sub { $ref };
*$init = $sub;
This is also useful for probing a caller's namespace
for variables. Somewhat contrived example, but if you
don't know whether the caller has a hash or an array
in it for some variable you could use:
sub blessed_isa
{
my $obj = shift;
my $name = shift;
my $pkg = ref $obj || $obj;
my $glob = qualify_to_ref $name, $pkg;
my @found = '';
defined *$glob{$_} && push @found, $_
for qw(HASH ARRAY CODE);
@found
}
Checking for $glob{CODE} is useful for looking up
methods defined in the class (vs. inherited as with
$item->can).
Or, say you want to pass the type of data required into
a constructor only if the data doesn't already exist:
my $item = shift;
my $type = uc shift;
my $pkg = ref $item || $item;
my $glob = qualify_to_ref $name, $pkg;
*$glob = $type eq 'HASH' ? {} : []
unless defined *$glob{$type};
Nice thing is that you can do all of this now without resorting
to no strict 'refs'.
--
Steven Lembark 85-09 90th Street
Workhorse Computing Woodhaven, NY 11421
lembark at wrkhors.com 1 888 359 3508
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NEXT-init-1.00.tar.gz
Type: application/x-gunzip
Size: 6961 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/chicago-talk/attachments/20040907/31ecea16/NEXT-init-1.00.tar-0001.bin
More information about the Chicago-talk
mailing list