私はPerlに少し慣れていて、Hash of Arraysをモジュール間で移動することについて助けが必要です。Perl - モジュール間での配列のハッシュ
現在、私はそうのような配列を格納DBモジュールがあります。
sub getSourceCriteria {
my($self) = shift();
my($sourceId) = shift();
chomp $sourceId;
my(%criteria) =();
$logger->debug("Getting records for Source ID: " . $sourceId);
$dbh=DBI->connect('dbi:ODBC:StkSkrnDB', 'RTETET', 'XXuser01',{ RaiseError => 1, AutoCommit => 0 }) || \
$logger->err_die("Database connection not made: $DBI::errstr\n");
my($sth) = "select a.criteria_id, a.criteria_type, a.criteria_props,a.generalcriteria_id,b.field_id ";
$sth = $sth . "from t_criteria a, t_sourceMapping b where a.generalcriteria_id = (select generalcriteria_id from t_sourcecriteria where source_id =?) ";
$sth = $sth . "and a.criteria_id=b.criteria_id";
my($qry) = $dbh->prepare($sth);
$qry->execute($sourceId) || $logger->error("Could not query for Source Criteria: $DBI::errstr\n");
my(@row)=();
my($tempCount) = 0;
while (@row = $qry->fetchrow_array) {
$tempCount = scalar @row;
$logger->debug("Size of retrieved SQL Array : $tempCount");
$criteria{$row[0]} = \@row;
##@{$criteria{$row[0]} } = \@row;
}
return %criteria;
}
を私は上記のコードからSQLの出力を読み込み、別々のperlスクリプトがあります。
foreach my $criteria (keys %criterias) {
@temp = exists($criterias{$criteria}) ? @{ $criterias{$criteria} } :();
##my $tempStr = exists($criterias{$criteria}) ? "Yes" : "No";
$arraySize = scalar @temp;
$logger->debug("GENERALCRITERIA_ID is $GENERALCRITERIA_ID and size of array is $arraySize and $temp[0]");
$genCrit_ID = $temp[$GENERALCRITERIA_ID];
$logger->debug("Criteria ID $criteria has Gen Criteria ID $genCrit_ID");
if (0!=$generalCriteria_ID || $generalCriteria_ID != $genCrit_ID) { ## test for uniqueness
$generalCriteria_ID = -1;
}
else {
$generalCriteria_ID = $genCrit_ID;
}
}# do something with $key and $value
$generalCriteria = $generalCriteria_ID;
}
問題を私は0を取得した配列のサイズ(2番目のスニペット)として取得していますが、配列を格納すると(1番目のスニペットで)、実際の配列のサイズを調べて取得します。
お願い/ご意見をいただければ幸いです。
EDIT DBインターフェイスコードにさらにコードを追加しました。
読者に明らかな説明がないまま大きなコードの真ん中からコードが抜け落ちることは、あなたの問題を示す素晴らしい方法ではありません。この問題を明らかにする最小限ではっきりした*自己完結型*(=実行可能な)サンプルを考え出すべきです。それを作ることを試みることはあなた自身の問題を解決することはありそうもありません。 – Lumi
私は正直なところ、抽出したコードの断片が、エラーを促すPerl言語に関する私の馴染みがないことを確信しているので、答えを推論するのに十分であると感じました。私は、分析を助けるためのコードを追加していきたいと思います。 –
注意「極小」ではなく「極小」と書いています。 :-)真剣に、このアドバイスを聞いてみてください、あなたは解決策を自分で見つけるでしょう。すでに何千倍も私を助けてくれました。問題を明らかにする最小の例。 – Lumi