Hasches verschachteln?
Chrisi
- perl
0
Struppi
0 Chrisi
0
Patrick Andrieu
Hi zusammen,
ich versuche verzweifelt auf einen verschachtelten Hash zuzugreifen:
my %FS = (
'ext2' => (
'bin' => 'mkfs.ext2',
'opt' => '-F'
)
);
Ich komm aber nicht an die Werte heran, habe dazu folgendes versucht:
$FS{'ext2'}{'bin'}; -> soll ergeben mkfs.ext2
$FS{'ext2'}{'opt'}; -> soll ergeben -F
Kann es sein das es da in Perl ganz anders zur Sache geht?
In den Dokus die ich gefunden habe ist mesitens beschrieben wie man eine versch. Hash anlegt, daher denke ich das mein Fehler beim Zugriff entsteht.
Kann mir da jemand weiterhelfen?
Danke und Viele Grüße
Chrisi
my %FS = (
'ext2' => (
'bin' => 'mkfs.ext2',
'opt' => '-F'
)
);
Das ist falsch http://perldoc.perl.org/perldsc.html#HASHES-OF-HASHES
In den Dokus die ich gefunden habe ist mesitens beschrieben wie man eine versch. Hash anlegt, daher denke ich das mein Fehler beim Zugriff entsteht.
sowohl als auch, welche Doku benutzt du? Nicht Perldoc?
Struppi.
Hi Struppi,
irgendwie komme ich da nicht hinter:
my %FS = (
ext2 => (
bin => 'mkfs.ext2',
opt => '-F'
)
);
print $FS{ext2}{bin};
Can't use string ("bin") as a HASH ref while "strict refs" in use
Hab ich da jetzt noch immer einen Fehler drin den ich nicht sehe?
Gruß
Chrisi
irgendwie komme ich da nicht hinter:
my %FS = (
ext2 => (
bin => 'mkfs.ext2',
opt => '-F'
)
);
Du hast dir die seite oder wenigstens den Abschnitt angeschaut, den ich dir verlinkt habe?
print $FS{ext2}{bin};
Can't use string ("bin") as a HASH ref while "strict refs" in use
Hab ich da jetzt noch immer einen Fehler drin den ich nicht sehe?
Immer noch beide.
Struppi.
Hallo Chrisi!
my %FS = (
ext2 => (
bin => 'mkfs.ext2',
opt => '-F'
)
);
Bei komplexen Datenstrukturen ist es wichtig, sie übersichtlich darzustellen:
C:>perl -w
use strict;
my %FS = (
'ext2' => {
'bin' => 'mkfs.ext2',
'opt' => '-F'
}
);
print $FS{ext2}->{'bin'};
^Z
mkfs.ext2
Hab ich da jetzt noch immer einen Fehler drin den ich nicht sehe?
Ja, du klammerst Dich an den falschen Klammern ;)
Viele Grüße aus Frankfurt/Main,
Patrick

Hallo Chrisi!
Ergänzend zu Struppis Hinweis: Dein Fehler sind falsche Klammer für die Hashreferenz. Beispiele:
Normale statt geschweifte Klammer:
C:>perl -w
my $ref = (1 => 'dodo', 3 => 'dudu');
Useless use of a constant in void context at - line 1.
Useless use of a constant in void context at - line 1.
Perl warnt Dich schon, dass da irgendwas nicht stimmt. Dagegen:
Mit den richtigen (geschweiften) Klammern:
C:>perl -w
my $ref = {1 => 'dodo', 2 => 'dudu'};
print $ref;
^Z
HASH(0x2251c8)
Jetzt haben wir eine richtige Hashreferenz. Für eine Arrayreferenz brauchst Du hingegen eckige Klamer:
C:>perl -w
my $ref = [1,2,3,4];
print $ref;
^Z
ARRAY(0x2251c8)
Viele Grüße aus Frankfurt/Main,
Patrick

Hi zusammen,
danke, jetzt hat es klick gemacht, es funktioniert :-)
Eine Frage habe ich noch: In der Doku werden die Keys nicht in Anführungszeichen gefasst, hat das einen tieferen Sinn oder ist es egal wie man es macht?
my %FS = (
ext2 => {
bin => 'mkfs.ext2',
opt => '-F'
}
)
oder:
my %FS = (
'ext2' => {
'bin' => 'mkfs.ext2',
'opt' => '-F'
}
)
Ich will ja nicht gleich alles falsch machen was man falsch machen kann :-)
VG
Chrisi
Hallo Chrisi!
Eine Frage habe ich noch: In der Doku werden die Keys nicht in Anführungszeichen gefasst, hat das einen tieferen Sinn oder ist es egal wie man es macht?
Die kann man in der Tat weglassen, solange man zusammenhängende Strings für die Bezeichnung der Keys benutzt. Bei den values aber sind sie allerdings auch bei einfachen Strings Pflicht.
Viele Grüße aus Frankfurt/Main,
Patrick
