Сначала гольф:
my @list = map { [ /(\S+)\/NNP/g ] } map { ( /\[NP ([^\]]+)]/g ) } <DATA>;
- Мы берем все строки на входе
- Мы получаем все экземпляры
'[NP...]'
- Для каждого экземплярамы отображаем его в массив всех экземпляров
'*/NNP'
.
Чуть более длинная рука, это выглядит так:
my @list;
while ( my $line = <DATA> ) {
foreach my $g ( $line =~ /\[NP ([^\]]+)]/g ) {
push @list, [ $g =~ /(\S+)\/NNP/g ];
}
}
Дамп выглядит так:
@list: [
[
'Ebd',
'AlmEz',
'AbrAhym'
],
[
'hAnY',
'HjAb'
],
[
'xAld',
'ftH',
'Allh'
],
[
'ESAm',
'$rf'
],
[
'AlqAhrp'
]
]
(Отвечая на комментарий) Есть два способа распечатать структуру, как у меня выше.Более стандартный способ - это что-то вроде:
use Data::Dumper ();
say Data::Dumper->Dump( [ \@list ], [ '*list' ] );
Второй, который я использую:
use Smart::Comments;
### @list
См. Smart::Comments
.(Что в значительной степени делает то же самое за кулисами.)