Schrift
[thread]11479[/thread]

use strict problem



<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-03-17 19:53
#107150 #107150
Moin Freunde,
habe folgenden Code:
Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl -w

use strict;

$a = 42;

print $a;

Zugegeben, nix weltbewegendes, funtioniert auch einwandfrei und verwende ich statt der Variablen a die Variable b ist auch noch alles im Lot.
Verwende ich stattdessen als Variablennamen c (bzw. d, e ...) bekomme ich die Fehlermeldung:
Code: (dl )
1
2
3
Global symbol "$c" requires explicit package name at test.pl line 5.
Global symbol "$c" requires explicit package name at test.pl line 7.
Execution of test.pl aborted due to compilation errors.

Jetzt ist mir die Verwendung von use strict schon klar (es gibt hier in der Wissensbasis auch einen sehr guten Artikel drüber),
aber woher rührt die Sonderstellung von a, bzw. b?
betterworld
 2008-03-17 20:09
#107151 #107151
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
$a und $b sind Spezialvariablen, ähnlich wie auch zum Beispiel $_.
Sind halt etwas ungeschickt benannt. Man kann sie zwar auch mit my deklarieren, woraufhin sie sich fast so verhalten wie andere my-Variablen, aber davon wird oft abgeraten.

Siehe auch perldoc -f sort
Gast Gast
 2008-03-17 20:24
#107152 #107152
Besten Dank für die prompte Bedienung.

Mein Feierabendprogramm steht also fest.
Erstmal ein beherztes perldoc -f sort | lpr, anschließend geht's in die Falle und kommt des Ganze unter's Kopfkissen ;-)
KurtZ
 2008-03-17 20:49
#107153 #107153
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
betterworld+2008-03-17 19:09:20--
$a und $b sind Spezialvariablen, ähnlich wie auch zum Beispiel $_.
Sind halt etwas ungeschickt benannt. Man kann sie zwar auch mit my deklarieren, woraufhin sie sich fast so verhalten wie andere my-Variablen, aber davon wird oft abgeraten.


zurecht, das "fast so" wollte ich mal für mich klären, folgendes Ergebnis

Code (perl): (dl )
1
2
3
4
my $a=1; my $b=1;

@x= qw{z g a };
print sort { our ($a,$b); $a cmp $b } @x


sort bracht Packagevariablen, schreibe ich im übergeordneten Scope my $a rein gibts deswegen ne Fehlermeldung. Einziger Ausweg ist ein explizites our im Blockscope und our ist nicht immer abwärtskompatibel...


TMTOWTDYOG (there's more than one way to dig your own grave)
betterworld
 2008-03-18 05:47
#107158 #107158
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
KurtZ+2008-03-17 19:49:44--
Einziger Ausweg ist ein explizites our im Blockscope

Nicht ganz der einzige Ausweg: Da die Spezialvariablen $a und $b Paketvariablen sind, kann man auf sie im sort-Block auch mit $Paket::a bzw. $Paket::b zugreifen. Aber ich glaube, den Ärger spart man sich lieber, indem man $a und $b einfach nicht mit my oder sonstwie deklariert (zumindest dann, wenn man sort benutzen will...). Es wären allerdings so schöne Namen für allerlei Krimskrams... daher meinte ich auch, dass die Variablen unglücklich benannt sind.
Das mit $Paket::a steht uebrigens auch in perldoc -f sort, welches ich tatsaechlich erst gelesen habe, nachdem ich es oben empfohlen habe ;) Ist irgendwie laenger als ich gedacht habe, also viel Spass damit unterm Kopfkissen ;) Eigentlich habe ich es nur empfohlen, um darauf hinzudeuten, warum/wofuer $a und $b reserviert sind, naemlich fuer sort.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-03-17 19:53.