Вы можете выполнить цикл по массиву, создав индекс, в котором вы видите первую и последнюю скобки, а затем извлеките соответствующий фрагмент.
my @array = ('possible text',
'(text surrounded with round brackets)',
'text without brackets',
'(text surrounded with round brackets)',
'possible text');
my ($first, $last);
for (my $i = 0; $i < $#array; ++$i) {
next unless $array[$i] =~ m/^\s*\(/; # maybe adapt this regex
$first = $i;
last;
}
for (my $j = $#array; $j > 0; --$j) {
next unless $array[$i] =~ m/^\s*\(/; # tweak this too then
$last = $j;
last;
}
my $line = join (' ', @array[$first..$last]);
Боюсь, это не так элегантно, как map
или grep
.
Редактировать: Изначально имелся один цикл для поиска $first
и $last
, но два отдельных цикла более эффективны. Это также зависит от структуры ваших данных; если его не много, эта оптимизация, очевидно, не очень важна. С другой стороны, если данных действительно много, вы можете оптимизировать их еще больше.