Rückgabe mehrerer Werte aus einer Perl-Funktion aufrufen?
Wie gebe ich mehrere Werte aus einer Perl-Funktion aufrufen?
Beispielcode
my ($value1, $value2, $value3) = getValues(@parts)
sub getValues
{
foreach(@_)
{
$_ =~ m{/test1_name (.*) test2_name (.*) test3_name (.*)/};
$test1_value = $1;
$test2_value = $2;
$test3_value = $3;
}
}
Dieser code nicht funktioniert.
Könnte Euch zeigen, wie Ihr array
Nur um sicherzustellen, dass Sie sind sich bewusst, nahm ich nur den ersten Wert aus dem array
@parts
wird erklärt?Nur um sicherzustellen, dass Sie sind sich bewusst, nahm ich nur den ersten Wert aus dem array
@parts
. Wenn Sie möchten, tun Sie dies für alle Werte in diesem array, dann haben Sie, um eine for-Schleife verwenden.InformationsquelleAutor Bruc Walker | 2011-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht, um es in der foreach-Schleife, wenn Sie nur versuchen, um $1, $2, $3. Die
my $str = shift @_;
sagt im Grunde "legen Sie die variable str an das erste Element in der übergebenen Werte in dieses sub".Auch, Sie übergeben ein array. Ich habe eine Verschiebung, denn das nimmt den ersten Wert aus dem array (das hab ich vorausgesetzt, ist die Zeichenfolge, die Sie möchten, zu analysieren). Wenn Sie versuchen, etwas anderes zu tun, aktualisieren Sie Ihre Frage und ich werde zu aktualisieren, meine Antwort.
InformationsquelleAutor Dave
Zusätzlich zu den anderen Antworten, kann man sich die Tatsache zunutze, dass eine übereinstimmung mit regulärem Ausdruck in Listen-Kontext liefert die Runden Klammern, und dass alle Unterprogramme kehren Ihre Letzte ausgewertete Ausdruck:
Da die Unterroutine so einfach ist, Sie können auch schreiben Sie es auf diese Weise:
InformationsquelleAutor Eric Strom
Perl idiom würde die Rückkehr der mehrere Werte in einer Liste, und weisen Sie das Ergebnis der Funktion die Liste der Variablen, die Sie wollen Werte erhalten. Sie haben bereits zugewiesen, das Ergebnis der Funktion korrekt, so dass die einzige änderung, die Sie brauchen, ist
return ($1, $2, $3);
als jeder vermutet hat.InformationsquelleAutor smackcrane