my %cache; sub first_line { my ($filename) = @_; unless (exists $cache{$filename}) { open( my $fh, $filename ) or die "Cannot open '$filename': $!\n"; $cache{$filename} = <$fh>; } return $cache{$filename}; }