in reply to Duplicating Pascal's with statement in Perl for anonymous data structures
But you have to turn off strict, and it definitely pollutes the main namespace (or another namespace, if you litter your code with package statements). So I don't really recommend it, but it can be done..
Update: got rid of string eval, at least.use warnings; my %hash = (foo => 'bar', a => 'x'); sub with (\%&) { my ($href, $cref) = @_; *$_ = \$href->{$_} for keys %$href; $cref->(); } print "$_: $hash{$_}\n" for keys %hash; my $z = 6; with %hash, sub { print "** $foo **!\n"; $a = 5; $z = 'changed lexical'; } ; print "$_: $hash{$_}\n" for keys %hash; print "Z is $z\n";
|
|---|