Ich nehme an, es hängt vom Kontext ab.
&func
call gemacht wird Ich habe diesen Code wo ich habe unerwarteten eval
call in Zeile 1004:
Und dieser Stacktrace:
%Vor% Aus meiner Log-Datei kann ich sehen, dass DBIx::Class::DESTROY
sub heißt:
Warum wird die Objektzerstörung verschoben? Ich nehme an, das hängt irgendwie mit @_
zusammen
Irgendwelche Vorschläge dazu, was hier die Objektzerstörung auslösen könnte
In einem &func
-Aufruf ohne eine Argumentliste werden nicht nur die Elemente von @_
wiederverwendet, sondern das ganze @_
wird wiederverwendet.
Typische Ausgabe:
%Vor% Ausgehend von main
in den &func
-Aufruf wird @_
nicht lokalisiert, kopiert oder in irgendeiner Weise geändert. Das Ändern von @_
in func
von &func
-Aufruf wirkt sich auf @_
im Aufrufer aus, aber das Ändern von func()
in% nicht.
Ich habe gefunden, warum DESTROY
beim Zuweisen von:
@DB::context
-Elemente sind zerstört ARRAYREF
für Unterroutinenargumente LIST
Wegen dieser Links werden Argumente nicht zerstört, wenn sie normalerweise sollten. Beispiel:
%Vor%$handle
sollte am Ende des Bereichs @_
in @DB::context
gespeichert.
$handle
wird nicht zerstört, weil immer noch auf @DB::context
werden freigegeben. Also $handle
destrucion wird bis zu diesem Also @_
ist nicht schuldig. Danke @mob für deine Erklärung