Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- my %orig;
- for my $name (qw/foo bar baz/) {
- my $var = ${$meta::{$name}};
- $orig{$name} = $$var;
- $$var = $$var * 2;
- }
- meta::p();
- for my $name (keys %orig) {
- my $var = ${$meta::{$name}};
- $$var = $orig{$name};
- }
- meta::p();
- package meta;
- BEGIN {
- our $foo = 1;
- our $bar = 2;
- our $baz = 3;
- }
- sub p { print join(" :: ", $meta::foo, $meta::bar, $meta::baz), "n" }
- my $eval = '';
- for my $name (qw/foo bar baz/) {
- $eval .= "local $meta::$name = $meta::$name * 2;n";
- }
- eval "$eval meta::p()";
- meta::p();
- use strict;
- use warnings;
- {
- no strict `refs`;
- local ${"meta::$name"} = ${"meta::$name"} * 2;
- meta::p();
- }
- meta::p();
- # This works but does not work on an array of names.
- { no strict 'refs';
- local ( ${'meta::foo'}, ${'meta::bar'}, ${'meta::baz'} );
- meta::p();
- }
- meta::p();
- # THIS DOES NOT WORK AT ALL!
- { no strict 'refs';
- my @to_localize = map "meta::$_", qw/foo bar baz/;
- local ${$_} = $$_ * 2 for @to_localize;
- meta::p();
- }
- meta::p();
- { no strict 'refs';
- my @to_localize = map "meta::$_", qw/foo bar baz/;
- LOCALIZER:
- my $localize_me = shift @to_localize;
- local ${$localize_me} = $$localize_me * 2;
- goto LOCALIZER if @to_localize;
- meta::p();
- }
- meta::p();
Add Comment
Please, Sign In to add comment