use strict; use warnings; use Data::Dump; my $first = 'dev'; my $last = 'manage'; my $in = 0; my @keys; while () { if (defined(my $key = (split)[-1])) { if ($key eq $first .. $key eq $last) { $in = 1; push @keys, $key; } elsif ($in && $key eq 'manage') { push @keys, $key; } else { $in = 0; } } } dd @keys; __DATA__ < as before > #### 17:42 >perl 1916_SoPW.pl ( "dev", "dev", "prod", "prod", "prod", "qa", "qa", "qa", "manage", "manage", "manage", "manage", ) 17:42 >