There was a thread on this. And here's the trick hack:
sub do_fh (*) {
# make use of @INC
my $FH = shift() or return undef;
unshift(@INC, sub { shift(@INC) and return $FH });
$@ = "";
my @ret = do $FH;
# remove %INC side-effect
no warnings;
delete $INC{$FH};
return @ret;
}