Wie kann ich automatisch alle skalaren Variablen in Perl initialisieren?

7

Perl initialisiert automatisch Variablen standardmäßig auf undef .

Gibt es eine Möglichkeit, dieses Standardverhalten zu überschreiben und dem Perl-Interpreter mitzuteilen, Variablen auf zero (oder einen anderen festen Wert) zu initialisieren?

    
Lazer 03.11.2010, 18:58
quelle

4 Antworten

13

Die Empfehlung in Code Complete ist wichtig für Sprache wie C, denn wenn Sie

haben %Vor%

Der Wert von counter ist, was auch immer passiert, um diesen Speicher zu belegen.

In Perl, wenn Sie eine Variable mit

deklarieren %Vor%

Es besteht kein Zweifel, dass der Wert von $counter undef nicht irgendein zufälliger Müll ist.

Daher wird die Motivation hinter der Empfehlung, d. h. sicherzustellen, dass alle Variablen mit bekannten Werten beginnen, in Perl automatisch erfüllt, und es ist nicht notwendig, etwas zu tun.

Was Sie mit Zählern tun, ist, sie zu erhöhen oder zu verringern. Das Ergebnis von:

%Vor%

ist in Perl gut definiert. $counter enthält den Wert 1 .

Abschließend möchte ich argumentieren, dass in Perl in den meisten Fällen keine Zähler erforderlich sind und Code, der umfangreiche Zählervariablen verwendet, möglicherweise neu geschrieben werden muss.

    
Sinan Ünür 03.11.2010, 19:28
quelle
11

Soweit ich weiß, ist dies nicht möglich (und sollte nicht sein, es ist sogar noch gefährlicher als $[ ).

Sie können Ihre Variablen wie folgt initialisieren, um die Standardwerte zu reduzieren:

%Vor%

oder verschieben Sie die Initialisierung in eine Funktion:

%Vor%

oder sogar:

%Vor%     
Eric Strom 03.11.2010 19:28
quelle
5

Nein. Dies kann zu sehr beängstigenden und schwer entzifferbaren Fehlern führen, daher ist es keine gute Idee, das Verhalten auf diese Weise zu ändern.

In Perl können Sie Variablen zum richtigen Zeitpunkt deklarieren, wenn Sie sie zum ersten Mal benötigen. Daher müssen diese nicht zuerst deklariert werden (mit oder ohne Initialisierung) und dann später verwendet werden. Darüber hinaus arbeiten Operatoren wie ++ mit undefinierten Werten gleich gut wie Null, sodass Sie Zähler gar nicht initialisieren müssen:

%Vor%

Ich kann jedoch einen Stecker für Moose einfügen, indem ich erwähne, dass Sie eine automatische Initialisierung von Attributen in Ihren Moose-Klassen erreichen können :

%Vor%

druckt:

  

string hat einen Wert: Anfangswert
  Zahl hat Wert: 0

    
Ether 03.11.2010 19:22
quelle
0

Haben Sie einen konkreten Grund, dies zu tun, oder ist es einfach "weil Code Complete sagt, ich sollte"?

Wenn der ehemalige, teilen Sie bitte den Grund und wir können richtig diskutieren Möglichkeiten, um Ihr wahres Ziel zu erreichen.

Falls letzteres zutrifft, denken Sie daran, dass Code Complete eine Reihe von Richtlinien für die Programmierung in C und nicht in Perl ist. Perl ist nicht C und hat seine eigenen Stärken und Schwächen, was auch bedeutet, dass es eine andere Reihe von ... hat und ich hasse es, diese Phrase zu verwenden ... Best Practices. Richtlinien, die für eine Sprache geeignet sind, gelten nicht notwendigerweise für die jeweils andere Sprache. "Initialisieren Sie Variablen immer (wenn möglich), wenn Sie sie deklarieren" ist eine gute Übung in C, aber in Perl normalerweise nicht notwendig.

    
Dave Sherohman 04.11.2010 11:42
quelle

Tags und Links