2017-10-30 1 views
-1

Ich weiß, dass ohne eine explizite return der zuletzt ausgewertete Ausdruck zurückgegeben wird, aber es ist mir nicht klar, wie es in diesem Code gilt.Welche Funktion hat die Kontextauswertung

use strict; 
use warnings; 

sub f1 { 
    return "test 1\n"; 
} 

sub f2 { 
    f1(); 
} 

sub f3 { 
    f2(); 
} 

my $r = f3(); 

print $r; # prints "test 1" 

In diesem Fall stammte der zurückgegebene Wert von einem internen Aufruf der zweiten Ebene. Ich suche nach einer Referenz, die die Regel über diesen Punkt erklärt. Wie finde ich heraus, welche Funktion die Kontextauswertung hat?

+0

Was meinen Sie mit "Kontextauswertung"? – melpomene

+0

Die Tatsache zu wissen, welcher Wert zurückgegeben werden soll, bin ich nicht sicher über den Begriff zu verwenden –

Antwort

6

der letzte "Expression" wird ausgewertet und zurück

Das ist alles dort ist zu ihm.

$r ist das Ergebnis der Auswertung zugeordnet.

Das Sub f3 hat keine return-Anweisung, daher gibt es das Ergebnis der Auswertung der letzten Anweisung zurück, nämlich f2().

Das Sub f2 hat keine return-Anweisung, daher gibt es das Ergebnis der Auswertung der letzten Anweisung zurück, nämlich f1().

f1 hat eine explizite return-Anweisung, also gibt sie diese string zurück.

+0

In realen Produktionscode, wie zu bestimmen, welche Funktion ist verantwortlich für die letzte "Auswertung"? –

+2

Sie haben den Quellcode gelesen. Oder verwende einen Debugger. – Quentin

+0

@AliSAIDOMAR Ich verstehe diese Frage nicht. Sie bestimmen anhand des Codes Dinge über den Code. Wie beeinflusst dies die Verwendung von/return? – melpomene

Verwandte Themen