Your code is, I admit, more clever than mine. But if I understand correctly, you're setting up a hash in the stasher's symbol table. Since my case isn't really a script, that's not main and I might write something like:
package Stasher; sub stash { my $ns = caller; $ns = $ns . '::'; ${ $Stasher::{$ns}{foo} } = 'cheese'; };
Before I hammered out my current approach, I considered a less clever one:
package Stasher; our %stash_of; sub stash { my $ns = caller; $stash_of{$ns}{foo} = 'cheese'; };
This resembles a flyweight object and suffers from a similar weakness, in that Stasher keeps %stash_of entries alive unless and until an explict DESTROY is called. That's okay for flyweights but in my case, how does Stasher know when caller's entire package has gone out of scope?
My thought was to stash $foo in caller's symbol table because I can rely on it being deallocated in Perl's own good time.
In reply to Re^2: Stashing a Package Variable by Reference
by Xiong
in thread Stashing a Package Variable by Reference
by Xiong
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |