use strict; my @a=qw(a b c d); my @b=qw(b a e f); # this does exactly what your pair of 'for' loops # did... my @m = map { my $x = $_; grep { /^$x$/ } @b; } @a; print @m; print "\n"; #### ab #### use strict; my @a=qw(a b c d); my @b=qw(b a e f); my %h; my @m = map {$h{$_}++ ? $_ : ()} (@a, @b); print @m; print "\n"; #### $"=q;grep;;$,=q"grep";for(`find . -name ".saves*~"`){s;$/;;;/(.*-(\d+)-.*)$/; $_=["ps -e -o pid | "," $2 | "," -v "," "];`@$_`?{print"+ $1"}:{print"- $1"}&&`rm $1`; print$\;}