my $fh = myOpen( "<", $pathname ) #### my %cache; sub myOpen { my( $mode, $path ) = @_; my $fh; if ( not exists $cache{ $path } ) { -s $path or return; # don't do a 0-length or non-existent file open $fh, $mode, $path or return; ( sysread( $fh, $cache{ $path }, -s _ ) == -s _ ) or return; close $fh; } open $fh, $mode, \$cache{ $path } or return; return $fh; }