Ich versuche, diesen Perl-Code zu verstehen ...ungeradee Anzahl von Elementen in anonymen Hash
Wenn ein Stream ist es funktioniert, wenn es zwei oder mehr Ströme mit ungerader Anzahl von Elementen in anonymen warnt Hash. Es scheint in diesem Fall ein Array zurückzugeben. Wie füge ich die Array-Elemente korrekt zu @streams hinzu? Es scheint korrekt für den HASH-Fall in der If-Klausel hinzuzufügen. Stimmt die else-Klausel?
my $x = $viewedProjectDataObj->{streams};
if (ref($x) eq 'HASH') {
push(@streams, $x->{id});
} elsif (ref($x) eq 'ARRAY') {
print "$x\n";
print "@$x\n";
my @array = @$x;
foreach my $obj (@array) {
print "in $obj\n";
print Dumper($obj);
push(@streams, ($obj->{id}));
}
}
print "streamcount " . @streams % 2;
print Dumper(@streams);
my $stream_defect_filter_spec = {
'streamIdList' => @streams,
'includeDefectInstances' => 'true',
'includeHistory' => 'true',
};
my @streamDefects = $WS->get_stream_defects($defectProxy, \@cids, $stream_defect_filter_spec);
print Dumper(@streamDefects);
ich die nächsten Zeilen bin Hinzufügen ...
if ($defectSummary->{owner} eq "Various") {
foreach (@streamDefects) {
if (exists($_->{owner})) {
$defectSummary->{owner} = $_->{owner};
last;
}
}
}
my $diref = $streamDefects[0]->{defectInstances};
if ($diref) {
my $defectInstance;
if (ref($diref) eq 'HASH') {
$defectInstance = $diref;
} elsif (ref($diref) eq 'ARRAY') {
$defectInstance = @{$diref}[0];
} else {
die "Unable to handle $diref (".ref($diref).")";
}
Es jetzt Fehler mit
Web API Fehlercode S zurückgegeben: Server: Aufruf getStreamDefects: Kein Strom gefunden für Namen Null. $ VAR1 = -1; mir Kann Zeichenkette nicht ("-1") als HASH ref während "strict refs" im Einsatz bei xyz-handler.pl Linie 317.
einig Dumper Ausgabe
$VAR1 = {
'streamIdList' => [
{
'name' => 'asdfasdfadsfasdfa'
},
{
'name' => 'cpp-62bad47d63cfb25e76b29a4801c61d8d'
}
],
'includeDefectInstances' => 'true',
'includeHistory' => 'true'
};
Bitte überprüfen Sie die Antwort erneut. immer noch Ausgabe –
@DB, beide Beispiele hinzugefügt. – jm666