Как получить массив массивов - PullRequest
1 голос
/ 09 декабря 2010
@array1 = ('20020701', 'Sending Mail in Perl', 'Philip Yuson');
@array2 = ('20020601', 'Manipulating Dates in Perl', 'Philip Yuson');
@array3 = ('20020501', 'GUI Application for CVS', 'Philip Yuson');

@main = (\@array1, \@array2, \@array3);
use Data::Dumper ;
print Dumper \@main ;
print grep { $_ =~ /Manipulating Dates in Perl/} @main ;

Как заставить работать grep?

Ответы [ 4 ]

3 голосов
/ 09 декабря 2010
print grep { $_->[1] =~ /Manipulating Dates in Perl/} @main ;

Если вы просто собираетесь сравнивать плоские строки, вы должны использовать это вместо:

print grep { $_->[1] eq 'Manipulating Dates in Perl'} @main ;

Регулярное выражение будет соответствовать любой строке, которая содержит строку "МанипулированиеДаты в Perl ".

Для пояснения, $_ будет содержать ссылку на массив.$_->[1] будет разыменовывать массив и получать элемент с индексом 1.

0 голосов
/ 25 января 2014

надеюсь, что это поможет ...

используйте функцию "сказать";

my @fruit      = ('apples', 'oranges', 'pears', 'bananas', 'grapes');
my @dry_goods  = ('corn meal', 'sugar', 'flour', 'corn flakes');
my @sea_food   = ('flounder', 'lobster', 'baked clams');
my @drinks     = ('apple juice', 'milk', 'coke');

my @groceries  = (\@fruit, \@dry_goods, \@sea_food, \@drinks);

foreach (  map { grep {/apple/} @{$_}  }  @groceries ) { say $_ };
0 голосов
/ 11 декабря 2010

Разыщите их с картой:

grep { $_ =~ /please match/ } map { @{$_} } @arrays

Честно говоря, похоже, что вы бы предпочли хеш-ссылки:

my @docs = ( 
    {id => '20020701', "title" => 'Sending Mail in Perl',  "author" =. 'Philip Yuson'},
    {id => '20020601', "title" => 'Manipulating Dates in Perl', "author" => 'Philip Yuson'}
);

foreach (grep { $_->{"title"} =~ /Manipulating Dates/ } @docs) {
    print "Got match " . $_->{"id"} . "\n";
}
0 голосов
/ 09 декабря 2010

Можно сопоставить внутренний массив перед сопоставлением с шаблоном:

@result = grep { "@$_" =~ /Manipulating Dates in Perl/ } @main;

Это также может быть заданием для оператора интеллектуального сопоставления :

@result = grep { $_ ~~ /Manipulating Dates in Perl/} @main;

Это соответствует любой ссылке на массив в @main, которая имеет хотя бы один элемент, соответствующий заданному регулярному выражению.

В обоих случаях выходные данные представляют собой список ссылок на массивы, которые могут не соответствовать тому, что вы хотите отобразить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...