Was ist die Bedeutung des doppelten 'at' (@@) in Perl?

8

Ich prüfe einen von einem Anbieter bereitgestellten Patch auf ein Perl-Tool, das wir verwenden, und ich bemühe mich, den Grund für eine bestimmte Art von Änderung zu ermitteln - das vorläufige '@' an die Parameter, die an ein Unterprogramm übergeben werden .

Zum Beispiel eine Zeile, die war:

%Vor%

Ist jetzt:

%Vor%

Ich bin kein Perl-Entwickler, ich lerne hier unterwegs, aber bis jetzt verstehe, dass '@_' die Parameter sind, die an die umschließende Subroutine übergeben werden.

Ich verstehe auch Die obige Zuordnung (wo das '$ genfd' in Klammern auf der linken Seite eingeklammert ist) führt '@_' zu einer Liste und dann die skalare Variable 'genfd' dem ersten Element dieser Liste zu. Dies sollte dazu führen, dass der erste Parameter des Unterprogramms in 'genfd' gespeichert wird.

Worauf ich völlig festsitze, ist der Unterschied, den das zweite "@" macht. Ich habe Beispiele für diese Verwendung gefunden GitHub , aber niemals mit einer Erklärung, noch kann ich eine Erklärung für irgendwelche Perl-Referenzen oder SO finden. Jede Hilfe würde sehr geschätzt werden.

    
thisismyrobot 14.10.2013, 03:28
quelle

1 Antwort

18

Sieht wie ein schlechter Patch aus.

@@_ ist ein Syntaxfehler. Zumindest, wenn ich die folgende Perl-Quelldatei habe:

%Vor%

das Ausführen von perl -cw (mit Perl 5.14.2) ergibt:

%Vor%

Ich habe nicht alle Beispiele auf GitHub angeschaut, aber viele von ihnen sind in Dateien mit einem ,v Suffix. Dieses Suffix wird von RCS und CVS für ihre internen Versionskontrolldateien verwendet. Ich denke, das @ -Zeichen hat eine besondere Bedeutung, also wird es verdoppelt, um ein literales @ -Zeichen zu bezeichnen. (Ja, es ist etwas seltsam RCS oder CVS interne Dateien in einem Git Repository zu haben.)

Eine Art von RCS- oder CVS-Interaktion ist die wahrscheinlichste Erklärung für den Fehler, aber es könnte andere Ursachen geben.

Sie sollten die Person fragen, die den Patch zur Verfügung gestellt hat.

    
Keith Thompson 14.10.2013, 03:35
quelle

Tags und Links