Phoenix.pm: More symbol table weirdness
Beaves at aol.com
Beaves at aol.com
Thu Feb 10 12:24:32 CST 2000
In a message dated 2/10/00 10:31:20 AM US Mountain Standard Time,
doug.miles at ns2.phoenix.bowne.com writes:
<< # Make XML_ObjTree::* inherit from XML_ObjTree.
my $package_declaration = <<"EOD";
package XML_ObjTree::$package;
\@ISA = ('XML_ObjTree');
EOD
eval $package_declaration;
>>
I think I mentioned this in a previous post, but this eval is unecessary.
You just have to declare at least one variable in the package and that
package springs into existence. And, it doesn't matter what the current
package is. So the above code could be reduced to one line with no eval.
# package is the current package.
@{"XML_ObjTree::$package\::ISA"} = ('XML_ObjTree');
and the package XML_ObjTree::$package will be created. Note, you have to
escape the first colon before the 'ISA'. If you don't, then you'll be
interpolating the variable $ISA in the package 'package' which is not what
you want in this case.
If someone doesn't quite get this stuff, post your questions. Since I started
understanding a bit about Perl packages and symbol tables, I've found the
above technique and stuff similar to it to be VERY useful. I think it should
be in everyone's Bag o' Tricks.
Tim
More information about the Phoenix-pm
mailing list