my @match = do { open my $fh, '<', $file or die "$!"; grep /^$ARGV[0]\|/, <$fh>; }; #### my @match; { open my $fh, '<', $file or die "$!"; local $_; my $rx = qr/^$ARGV[0]\|/ m/$rx/ && push @match, $_ while <$fh>; } #### sub grep_file { my ($rx, $file) = @_; my @match; local $_; open my $fh, '<', $file or die "$!"; my $rx = qr/^$rx\|/ m/$rx/ && push @match, $_ while <$fh>; @match; }; my @match = grep_file($ARGV[0], $file);