in reply to Extracting array elements on either side of a match

unshift is useful for this:

#! perl -slw use strict; chomp( my @data = <DATA> ); my $i = 0; ++$i until $data[ $i ] =~ m[Red]; my $saved = $i; my @desired = $data[ $i ]; for ( 1 .. 4 ) { --$i until $data[ $i ] =~ m[White]; unshift @desired, $data[ $i-- ]; } --$i until $data[ $i ] =~ m[Blue]; unshift @desired, $data[ $i ]; for ( 1 .. 4 ) { ++$saved until $data[ $saved ] =~ m[White]; push @desired, $data[ $saved++ ]; } ++$saved until $data[ $saved ] =~ m[Blue]; push @desired, $data[ $saved ]; print for @desired; __DATA__

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."