package MyOpen; use Carp (); use Data::Dumper; use 5.010; my %cache; BEGIN { *CORE::GLOBAL::open = sub { my $pkg = caller; my $sub = $cache{$pkg} //= do { my $code = <&', 'STDOUT'; open FOO, ">", "/tmp/FOO";