Did you mean something like this?:
use strict;
use warnings;
my $file = 'reqtest.pl';
my $fh;
open $fh, ">$file" or die "Can't create file '$file': $!: $^E\n";
print $fh <<'EOT';
BEGIN {
print STDERR "Hit CTRL+C now!\n";
sleep 3;
}
1;
EOT
close $fh;
unshift @INC, sub {
my($coderef, $filename) = @_;
return unless $filename eq $file;
open $fh, $filename or die "Can't read file '$file': $!: $^E\n";
return $fh;
};
$SIG{INT} = sub {
print "Caught SIGINT. Terminating.\n";
if (open my $fh2, '<&=' . $*{delete $INC{$file}}) {
close $fh2 or warn "Can't close fh2: $!: $^E\n";
}
else {
warn "Can't fdopen fh: $!: $^E\n";
}
if (-f $file) {
unlink $file or warn "Can't delete file '$file': $!: $^E\n";
}
else {
print STDERR "file is already deleted (!)\n";
}
exit;
};
require $file or die "require() failed\n";
unlink $file or die "Can't delete file '$file': $!: $^E\n";
It doesn't work :( It prints "Can't fdopen fh: Invalid argument", and if I use Data::Dumper to dump the value corresponding to $file that was delete()'d from %INC then we can see why: it shows:
$VAR1 = sub { "DUMMY" };
i.e. not a GLOB reference at all.
- Steve
| [reply] [d/l] [select] |