*p2::func = $func; package p2; our $x = 100; func(); #### *p2::func = \$func; package p2; our $x = 100; $func->(); #### #!/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); #### #!/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();