my %cache; sub first_line { my $filename = shift; return $cache{$filename} if exists $cache{$filename}; my $f = new IO::File $filename, "r" or die "file not found"; my $line = <$f>; $cache{$filename} = $line; return $line; }