Schrift
[thread]7717[/thread]

Hash im Skalar-Kontext

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
pug
 2006-02-17 19:25
#63051 #63051
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen, ich kämpfe gerade in einem anderen Thread mit HTML:TEMPLATE.
In diesem Zusammenhang stellt sich für mich ein anderes allgemeineres Problem. Und zwar habe ich in meinem Skript ein Hash deklariert.
Code: (dl )
 my %kategorienhash 

später oder weiter unten fülle ich diesen Hash indem ich ihn im Skalarkontext fülle:
Code: (dl )
1
2
3
4
5
6
7
8
$result = $dbh->prepare ( "SELECT  katid, katname from kategorie" ) or die "Vorbereitung nicht durchfuehrbar!\n";

$result->execute() or die "Abfrage nicht ausfuehrbar -kategorie!\n";

while ( $zeile = $result->fetchrow_arrayref )
{
$kategoriehash{$zeile->[0]} = $zeile->[1];
}


Jetzt meckert der Compiler daß ich '$kategoriehash' nicht mit einem Skope-Operator versehen habe. Sprich das my oder our fehlt. Aber das ist ja keine neue Variable sondern nur ein vorher definierter Hash! Wie geht man da vor.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
esskar
 2006-02-17 21:04
#63052 #63052
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es heißt kategorienhash nicht kategoriehash :-)\n\n

<!--EDIT|esskar|1140203078-->
coax
 2006-02-17 23:48
#63053 #63053
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Klarer Fall fuer use strict; use warnings; ;)
,,Das perlt aber heute wieder...'' -- Dittsche
esskar
 2006-02-18 00:17
#63054 #63054
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=coax,17.02.2006, 22:48]Klarer Fall fuer use strict; use warnings; ;)[/quote]
hat er doch; es war eben nur ein lesefehler!
pug
 2006-02-18 16:10
#63055 #63055
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Sorry das ist es leider nicht. In meinem Code habe ich diesen Fehler nicht gemacht. Ich habe die Variable "%kategorienhash" eigens hier reingeschrieben und den Rest "reingepastet" ( auch so ein Wort ).

Also daran lag es nicht. Ich habe die Variable, mit vielen andern deklariert:
Code: (dl )
my ( $db_name, $db_user, $db_passwd, $dbh, $cookieValue, $cgi_obj, $result, $zeile, $vorname, $nachname, @kategorien, $tmpl, %kategoriehash );


Und hier angewendet, im Skalarkontext.
Code: (dl )
1
2
3
4
5
6
7
8
$result = $dbh->prepare ( "SELECT  katid, katname from kategorie" ) or die "Vorbereitung nicht durchfuehrbar!\n";

$result->execute() or die "Abfrage nicht ausfuehrbar -kategorie!\n";

while ( $zeile = $result->fetchrow_arrayref )
{
$kategoriehash{$zeile->[0]} = $zeile->[1];
}


Trotzdem bekomme ich diese Fehlermeldung:
Quote
Global symbol "$kategoriehash" requires explicit package name at /usr/lib/cgi-bin/neue_auktion.cgi line 66.
Execution of /usr/lib/cgi-bin/neue_auktion.cgi aborted due to compilation errors.


Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
esskar
 2006-02-18 16:14
#63056 #63056
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bist du sicher, dass der hash in dem kontext auch wirklich deklariert ist? wo genau deklarierst du denn die variablen? in einer sub?
bloonix
 2006-02-18 16:16
#63057 #63057
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pug,17.02.2006, 18:25]Wie geht man da vor.[/quote]
Solche Lesefehler können manchmal Nerven kosten. Vielleicht
könntest du auch was am Variablennamen ändern...

Abkürzungen scheinen sehr beliebt zu sein.

Objetke = obj
Kategorien = kat
Bereiche = ber
Benutzer = usr
Daten = dat
Temporär = tmp
Session ID = sid
Datenbankname = dbn
Datenbankuser = dbu
IP-Adresse = addr

usw.

Denn im Falle "Kategorienhash" ist zum Beispiel das "hash"
unnötig, da man an der Deklaration schon sieht, worum es
sich handelt. Ansonsten schätze ich mal, verwendest du auch

Kategorienarray
Kategorienhashreferenz
Kategorienarrayreferenz
Kategorienskalar
Kategorienhandle

usw...
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
esskar
 2006-02-18 16:20
#63058 #63058
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
OT: @opi: ich bin eher für sprechende Variablennamen; noch dazu sollten sie englisch sein
bloonix
 2006-02-18 16:24
#63059 #63059
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pug,18.02.2006, 15:10]my ( $db_name, $db_user, $db_passwd, $dbh, $cookieValue, $cgi_obj, $result, $zeile, $vorname, $nachname, @kategorien, $tmpl, %kategoriehash );[/code][/quote]
kann es sein, dass du die Deklaration in einem anderen Namens-
raum vornimmst? Dann ist er in der Schleife ungültig.

Darüber hinaus... möchtest du nicht wissen, warum dein prepare
oder execute eventuell fehlgeschlagen ist?

Ich empfehle da

Code: (dl )
1
2
3
$result = $dbh->prepare ( "SELECT  katid, katname from kategorie" ) or die "Vorbereitung nicht durchfuehrbar: ", $dbh->errstr;

$result->execute() or die "Abfrage nicht ausfuehrbar: ", $dbh->errstr;
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-02-18 16:26
#63060 #63060
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=esskar,18.02.2006, 15:20]OT[/quote]
Hi esskar, auf diese Abkürzung bin ich nun schon öfters gestoßen!
Was heißt das genau?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2006-02-17 19:25.