Я работаю над вопросом, который я разместил ранее ( здесь ), и пытаюсь преобразовать ответ в подпункт, чтобы я мог использовать его несколько раз.Не уверен, что все сделано правильно, хотя.Кто-нибудь может предоставить лучшую или более чистую сабвуфер?
У меня большой опыт программирования, но мой основной язык - PHP.Очень печально знать, как выполнять на одном языке, но не в состоянии сделать это на другом.
sub search_for_key
{
my ($args) = @_;
foreach $row(@{$args->{search_ary}}){
print "@$row[0] : @$row[1]\n";
}
my $thiskey = NULL;
my @result = map { $args->{search_ary}[$_][0] } # Get the 0th column...
grep { @$args->{search_in} =~ /$args->{search_ary}[$_][1]/ } # ... of rows where the
0 .. $#array; # first row matches
$thiskey = @result;
print "\nReturning: " . $thiskey . "\n";
return $thiskey;
}
search_for_key({
'search_ary' => $ref_cam_make,
'search_in' => 'Canon EOS Rebel XSi'
});
--- Редактировать ---
Из ответов на этот вопрос я покасоединили функцию ниже.Я новичок для Perl, поэтому я не очень понимаю синтаксис.Все, что я знаю, это то, что в этой строке grep выдается ошибка (не ссылка ARRAY в строке 26).
Поскольку я, кажется, не предоставил достаточно информации, я также упомяну, что:
Я вызываю эту функцию следующим образом (что может или не может быть правильно):
search_for_key({
'search_ary' => $ref_cam_make,
'search_in' => 'Canon EOS Rebel XSi'
});
И $ ref_cam_make - это массив, который я собираю из таблицы базы данных, например:
$ref_cam_make = $sth->fetchall_arrayref;
И это в такой структуре (если я понял, как заставить ассоциативную выборку работать правильно, я бы хотел использовать ее вместо цифровых клавиш):
Reference Array
Associative
row[1][cam_make_id]: 13, row[1][name]: Sony
Numeric
row[1][0]: 13, row[1][1]: Sony
row[0][0]: 19, row[0][1]: Canon
row[2][0]: 25, row[2][1]: HP
sub search_for_key
{
my ($args) = @_;
foreach my $row(@{$args->{search_ary}}){
print "@$row[0] : @$row[1]\n";
}
print grep { $args->{search_in} =~ @$args->{search_ary}[$_][1] } @$args->{search_ary};
}