Benutze immer meine; niemals lokal verwenden?

8

Bei der Implementierung des dynamischen Scopings habe ich local verwendet. Dann stieß ich auf diesen Post, der folgendes sagt:

  

Warum überhaupt lokal? Die Antwort ist 90% Geschichte. Frühe Versionen von   Perl hatte nur globale Variablen. local war sehr einfach zu implementieren, und   wurde zu Perl 4 als Teillösung für die lokale Variable hinzugefügt   Problem.

... niemals lokal.

Ist seine Verwendung veraltet oder entmutigt? Wenn ja, was ist die Alternative?

    
Anirudh Ramanathan 22.01.2013, 11:33
quelle

3 Antworten

26

Der Beitrag, mit dem Sie verlinkt haben, ist irreführend oder zumindest unvollständig. Es stimmt, dass Sie nie local verwenden sollten, um eine lexikalische Variable zu erstellen. Es tut dies nicht, und dafür steht my .

Sie sollten jedoch local verwenden, wenn Sie die tatsächliche Funktionalität benötigen: Geben Sie einen temporären Wert für eine globale Variable an. Dies wird am häufigsten verwendet, um Perls spezielle Variablen vorübergehend zu setzen. Ein klassischer Fall ist etwa so:

%Vor%

Um eine ganze Datei auf einmal zu lesen, müssen Sie das Aufzeichnungstrennzeichen auf undefiniert setzen. Aber das willst du nur vorübergehend tun; Daher sollte local verwendet werden.

Dies ist absolut nicht zu entmutigen. Es gilt als guter Perl-Code.

Update: Ich sehe, dass der Artikel tatsächlich eine Notiz hat, die seine "Nimm lokale verwenden" -Anweisung qualifiziert. Dennoch halte ich es für irreführend, eine solche pauschale Aussage zu treffen. Ich stimme den Kritikern zu, auf die die Notiz antwortet. Das obige Beispiel ist ein ziemlich allgemeiner Grundfall, und es gibt auch einige andere gebräuchliche Verwendungen von local in diesem Zusammenhang.

Ich verstehe, dass ein Anfänger-Tutorial die Dinge einfach halten muss, aber einfach muss nicht ungenau sein. "Im Moment brauchen Sie sich keine Sorgen über local zu machen; verwenden Sie einfach my " wäre genauso klar und einfach, würde aber jemanden nicht dazu verleiten zu denken, dass local nie verwendet werden.

    
user1919238 22.01.2013, 12:00
quelle
5

Verwenden Sie my , um eine lokale Variable zu erstellen, die die meiste Zeit die gewünschten Werte enthält.

Es ist in Ordnung, local für das zu verwenden, was nur local tut: einen anderen Wert für eine globale Variable zu setzen, die nach dem aktuellen Block wiederhergestellt wird. Das ist keineswegs veraltet. Es ist stabil, gut unterstützt und ist eine wichtige Perl-Funktion. (Es ist jedoch nicht so, dass die Leute etwas so gerne in der Nähe haben wollen wie das Erstellen einer lokalen Variablen. Insbesondere müssen viele Anfänger das nie tun.)

Was nicht empfohlen wird, ist die Verwendung von local , um zu versuchen, eine lokale Variable zu erstellen, da my dafür verwendet werden sollte. Es gibt niemals einen Grund, local dafür zu verwenden.

    
Smylers 22.01.2013 11:58
quelle
1

Es ist eigentlich kein schlechter Rat. Wie bei allen Programmierungsregeln ist der unausgesprochene Zusatz "sofern Sie nicht wirklich wissen, was Sie tun" . Für local gibt es legitime Anwendungsfälle. Aber im Allgemeinen, wenn Sie denken, dass local das richtige Werkzeug ist, sollten Sie es noch einmal überdenken, bevor Sie fortfahren.

    
darch 22.01.2013 18:18
quelle

Tags und Links