J'ai un problème curieux que je ne peux pas contourner. Pouvez-vous s'il vous plaît voir ce que je fais mal. J'essaye de construire un XML en Perl en utilisant XML :: LibXML. Tout fonctionne bien jusqu'à ce que je commence à construire des sous-routines et à passer des arguments.Comment passer des paramètres en Perl sans modifier les données
d'abord le code qui fonctionne
my $root = $doc->createElement("XML_FILE");
my @sortedOuterTags = qw (JMS_VERSION
FILE_NAME
SUBMIT_BY
SUBMIT_DATE
);
# Use hash slice to access the list in hash elements
# Remember has elements are accessed randomly, hence hash slice-ing
my %outHashTags;
@outHashTags { @sortedOuterTags } = ('data1',
'data2',
'data3',
'data3');
for my $name (@sortedOuterTags) {
my $outTag = $doc->createElement($name);
my $outValue = $outHashTags{$name};
$outTag->appendTextNode($outValue);
$root->appendChild($outTag);
}
Builds sortie:
<JMS_VERSION>data1</JMS_VERSION>
<FILE_NAME>data2</FILE_NAME>
<SUBMIT_BY>data3</SUBMIT_BY>
<SUBMIT_DATE>data4</SUBMIT_DATE>
Maintenant l'erreur:
Dès que je spin off pour la boucle à une sous routine comme indiqué ci-dessous I obtenir des erreurs. Je passe 3 paramenters. 1) ne peut pas obtenir des valeurs de tableau de storedReportTag 2) ne peut pas obtenir% des données reportHashTag 3) élément de rapport de $ est vide
code:
buildXMLElements(\@sortedReportTag, %reportHashTags, $report);
sub buildXMLElements() {
my(@elementTags, %hashTags, $parentElement) = @_;
for my $name (@elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags{$name};
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
Je veux mettre en sous que je avoir plusieurs balises à construire pour réutiliser le code. J'ai essayé de passer des paramètres à la fois directement et comme référence .......
Merci
Mise à jour:
Après avoir modifié mon Sub il ressemble maintenant à ceci:
buildXMLElements(\@sortedReportTag, \%reportHashTags, $report);
sub buildXMLElements() {
my($elementTags, $hashTags, $parentElement) = @_;
for my $name (@$elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags->[$name];
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
il meurt à la ligne:
my $reportValue = $hashTags->[$name];
mise à jour finale:
Avec l'aide de Jim I corrigé le code: Voici la version finale qui fonctionne
buildXMLElements(\@sortedReportTag, \%reportHashTags, $report);
sub buildXMLElements() {
my($elementTags, $hashTags, $parentElement) = @_;
for my $name (@$elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags->{$name};
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
http://stackoverflow.com/questions/29354417 – mob
http://stackoverflow.com/questions/1161043 – mob