use 5.014; use warnings; package Temp; use parent 'File::Temp'; sub new { my $self = shift; $self-> SUPER::new( DIR => '.' ) } sub DESTROY { my $self = shift; say "Destruction during ", ${^GLOBAL_PHASE}; $self-> SUPER::DESTROY } package main; use File::Copy; sub foo { my $h = Temp-> new } die unless -f 'x'; # this file must exist { copy 'x', my $fn1 = Temp-> new-> filename or die; copy 'x', my $fn2 = do { Temp-> new }-> filename or die; copy 'x', my $fn3 = do { my $h = Temp-> new }-> filename or die; copy 'x', my $fn4 = foo-> filename or die; say 1 if -f $fn1; say 2 if -f $fn2; say 3 if -f $fn3; say 4 if -f $fn4; say "End of scope"; } say "End of file"; __END__ Destruction during RUN Destruction during RUN Destruction during RUN 3 End of scope Destruction during RUN End of file #### copy 'x', my $fn3 = do { { my $h = Temp-> new } }-> filename or die; #### $_ = "Hi"; do { local $_ = "Hello" }; print