perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




10.02.2012 / 20:46

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragReferenz in einem Hash dereferenzieren
Seitenanfang
Halli Hallo!

Ich habe folgendes Konstrukt:


my %namen;
my $name="Hans";
$namen{'vorname'}=\$name;

Jetzt möchte ich anzeigen lassen was ursprünglich in $namen{'vorname'} steht. Kurz gesagt: "Hans" soll die Ausgabe sein.


print ${$namen{'vorname'}};

geht leider nicht. strict streikt da.

Kann mir jemand bei dieser Derferenzierung helfen? Ich bin schon lange am suchen aber offenbar zu blöd, das zu checken :-(

mfg, speed

Datum: 27.03.2007-12:46

Beitragre: Referenz in einem Hash dereferenzieren
Seitenanfang

my $printname=$namen{'vorname'};
print $$printname;

funktioniert, aber kann man das ohne die Zwischenvariable $printname schreiben?

Datum: 27.03.2007-13:02

Beitragre: Referenz in einem Hash dereferenzieren
Seitenanfang
Die Variante

print ${$namen{'vorname'}};

funktioniert auch unter strict. Welche Fehlermeldung erhälst du denn?

Datum: 27.03.2007-14:40

Beitragre: Referenz in einem Hash dereferenzieren
Seitenanfang
Habe den Fehler gefunden. Der Hash %namen ist bei print ${$namen{'vorname'}}; zwar definiert nur gibt es keinen Schlüssen 'vorname' und somit auch keine Referenz im Wert des Hashes.

Der Hash wird beim Aufruf einer anderen Subroutine mit Schlüsseln und Werten (Referenzen) gefüllt. Am Ende dieser Sub wird die ursprüngliche Sub aufgerufen. Dann kann nämlich dereferenziert werden.

Mein fehlerhafter Code im Schema:


my %error;
my $errorcode = '<font color=#FF0000>';

if ($action eq "daten"){&daten;)
elsif ($action eq "daten_save"){&daten_save;)
else{&daten;}

sub daten
{
print ${$error{'vorname'}};
print "Vorname<br><input type=\"text\" name=\"vorname\">";
# Mit submit werden die Daten an daten_save übergeben
}

sub daten_save
{
if (!$query{'vorname'})
{
$error{'vorname'}=\$errorcode;
&daten;
}
else
{
#Daten speichern
}
}


Der Hash hat einfach die Funktion, den Titel des Eingabefeldes "Vorname" rot zu machen. Habs jetzt mit einfachen Hashes gelöst. Die Variable wird nun nur mehr in den Hash-Wert kopiert. Zwar nicht die eleganteste Lösung aber was schöneres fällt mir nicht ein ;-)

mfg

Datum: 27.03.2007-15:30

Beitragre: Referenz in einem Hash dereferenzieren
Seitenanfang
Am besten prüft man zuvor ob die Variable definiert ist


if(defined($error{'vorname'})) {
# ... mach was wenn $error{'vorname'} definiert ist
print ${$error{'vorname'}}, "\n";
}
else {
# ... mach was wenn $error{'vorname'} _nicht_ definiert ist
}

Datum: 28.03.2007-00:39

-






-
-