my %cache; sub myOpen { my( $mode, $path ) = @_; my $fh; if( exists $cache{ $path } ) { open $fh, $mode, \$cache{ $path } or return; } else { open $fh, $mode, $path or return; { local $/; sysread( $fh, $cache{ $path }, -s( $path ) ) or return; close $fh; } open $fh, $mode, \$cache{ $path } or return; } return $fh; }