Perl, variables Verhalten, namensbasierte Diskrepanz

7

Symptom: $c="foo"; löst einen Fehler aus und $b="foo"; nicht.

Mein Skript besteht aus drei Zeilen. Das Folgende erzeugt keine Fehler oder Warnungen.% Co_de%
use strict;
$b = "foo";
aber wenn ich zu folgendem ändere, erhalte ich einen "expliziten Paketnamen" Fehler.
print $b;
use strict;
$c = "foo"; ,

Ich verstehe, dass print $c; verlangt, dass Variablen vor der Verwendung deklariert werden, und die Änderung von use strict; in $c = "foo"; verhindert zwar den Fehler, aber das allein erklärt die Diskrepanz nicht.

Kann jemand hier etwas Licht werfen? Ich bin sicher, ich vermisse etwas Offensichtliches. Ich laufe Strawberry Perl v5.16.3 in Windows 7 x64. Ich bearbeite in npp und führe meine Skripte von der Kommandozeile aus, über my $c = "foo";

    
mic angelo 15.07.2013, 20:59
quelle

2 Antworten

8

Einige globale Variablen wie $_ , $a , $b sind effektiv vordeklariert. Daher können die Variablen $a und $b ohne zusätzliche Deklarationen in einem sort -Block verwendet werden, wo sie die Werte von zwei Elementen haben:

%Vor%     
amon 15.07.2013, 21:02
quelle
17

Aus der strengen Dokumentation:

  

Wegen ihrer besonderen Verwendung durch sort () sind die Variablen $ a und $ b   von dieser Prüfung ausgenommen.

    
toolic 15.07.2013 21:01
quelle

Tags und Links