in reply to anonymous sub, packages, global variables
You can attach it to either a sub reference, or as a scalar to a sub reference
or*p2::func = $func; package p2; our $x = 100; func();
*p2::func = \$func; package p2; our $x = 100; $func->();
However, both of those will still use the '$x' global defined in package 'p1'. To fix that, rely on parameters instead of a global var.
#!/usr/bin/perl use warnings; use strict; package p1; our $x = 1; my $func = sub { print $_[0],"\n" }; $func->($x); *p2::func = $func; package p2; our $x = 100; func($x);
Or use caller to determine where the function was called from (very messy).
#!/usr/bin/perl use warnings; use strict; package p1; our $x = 1; my $func = sub { my $pkg = (caller)[0]; no strict 'refs'; print ${"${pkg}::x"},"\n" }; $func->(); *p2::func = $func; package p2; our $x = 100; func();
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: anonymous sub, packages, global variables
by LanX (Saint) on May 17, 2011 at 18:45 UTC | |
by wind (Priest) on May 17, 2011 at 18:49 UTC | |
by LanX (Saint) on May 17, 2011 at 18:54 UTC |