I have some code which looks like this:
foreach my $block ($self->get_blocks) { my %data = map { $_ => $block->$_ } qw/ package code setup teardown /; eval <<" END"; package $data{package}; \$data{setup}->(); \$data{code}->(); \$data{teardown}->(); END $self->_croak($@) if $@; }
Frankly, I don't like the eval there because it obfuscates the code and breaks syntax highlighting. What I really want is something conceptually similar to this:
foreach my $block ($self->get_blocks) { package $block->package; eval { $block->setup->(); $block->code->(); $block->teardown->(); }; $self->_croak($@) if $@; }
That's much easier to read and it's regrettably a problem I face all of the time. Is there an easy way to force code to run in a different package when I don't know the package until runtime?
Cheers,
Ovid
In reply to Dynamically Changing Packages w/out Eval by Ovid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |