use strict; use warnings; use Data::Dumper; my @records = ( [ qw{ 922337219576856 rgiles 5005444 156 pts/220 9:00:44 } ], [ qw{ 922337219576856 mrandall 3309650 35 none 9:10:44 } ], [ qw{ 922337219576856 mmartin 4565899 122 pts/101 9:15:44 } ], [ qw{ 59761456123786 rkelly 5555555 999 pts/900 9:00:00 } ], [ qw{ 59761456123786 mvick 1234567 886 none 9:20:00 } ], [ qw{ 59761456123786 jrussel 7654321 456 tty/101 10:00:00 } ], [ qw{ 86555522211 cklien 5151515 000 tty/100 10:00:00 } ], [ qw{ 86555522211 mmartin 1234567 987 none 11:00:00 } ], ); my @excludeThese = qw{ rgiles mrandall rkelly mvick jrussel cklien }; my $rxExclude = do { local $" = q{|}; qr{(?:@excludeThese)}; }; my @excluded; foreach my $idx ( reverse 0 .. $#records ) { unshift @excluded, splice @records, $idx, 1 if $records[ $idx ]->[ 1 ] =~ $rxExclude; } print Data::Dumper->Dumpxs( [ \ @records, \ @excluded ], [ qw{ *records *excluded } ] );