use strict; use warnings; sub name_search { join '', map {$_->[0]} grep { 0<=index $_[0], $_->[1] and 0<=index $_[0], $_->[2] } @{$_[1]}; } my @criteria; my $letter = 65; push @criteria, [ chr( $letter++ ), splice @ARGV, 0, 2 ] while @ARGV >= 2; print name_search 'John Smith', \@criteria; print "\n";