我正在從之前發佈的問題(here)開始工作,並試圖將答案轉換爲子版本,以便多次使用它。不確定它是否正確。任何人都可以提供更好或更清潔的子?將代碼轉換爲Perl子版,但不知道我是否正確
我有很多編程經驗,但我的主要語言是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行的錯誤(不是第26行的ARRAY參考)。
因爲我似乎沒有給予足夠的信息,我也會提到:
我打電話這樣這個功能(可能會或可能不正確):
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};
}
您缺少'use strict;使用警告;'在腳本/模塊的頂部。它會捕獲許多錯誤並使診斷程序更有用(當您的示例代碼中已經修復了這些簡單錯誤時,它們更有可能爲SO上的人員提供幫助)。 – Ether 2010-06-13 17:13:43
@Ether ...此代碼是來自較大腳本的複製粘貼。我在完整的腳本中使用嚴格和警告。 – 2010-06-13 17:30:18
'foreach $ row(@ {$ args - > {search_ary}}){'說你沒有。或者,你忽略了你所得到的錯誤,這同樣糟糕。 – Ether 2010-06-13 17:47:09