use strict ; use warnings ; my @foo = ('A', 'B', 'C', 'A', 'B', 'A', 'D') ; my $q ; my @A = map defined($_) && m/A/ ? scalar($q = $_, $_ = undef, $q) : (), @foo ; my @B = map defined($_) && m/B/ ? scalar($q = $_, $_ = undef, $q) : (), @foo ; my @C = map defined($_) && m/C/ ? scalar($q = $_, $_ = undef, $q) : (), @foo ; @foo = grep defined($_), @foo ; print "A: @A\n" ; print "B: @B\n" ; print "C: @C\n" ; print " @foo\n" ;