|
| keys på en hash i en hash Fra : Christian Dannesboe |
Dato : 11-05-02 17:25 |
|
Hej
Jeg kan ikke få perl til at spytte navnene ud med keys funktionen. Problemet
er at jeg har en hash i en hash
$settings{'navn1'}{'data1'}="1";
$settings{'navn1'}{'data2'}="2";
$settings{'navn1'}{'data3'}="3";
$settings{'navn1'}{'data4'}="4";
$settings{'navn1'}{'data5'}="5";
$settings{'navn1'}{'data6'}="6";
$settings{'navn2'}{'data1'}="7";
$settings{'navn2'}{'data2'}="8";
$settings{'navn2'}{'data3'}="9";
$settings{'navn2'}{'data4'}="10";
$settings{'navn3'}{'data1'}="11";
$settings{'navn3'}{'data2'}="12";
$settings{'navn3'}{'data3'}="13";
$settings{'navn3'}{'data4'}="14";
$settings{'navn3'}{'data5'}="15";
$settings{'navn3'}{'data6'}="16";
keys(%settings) giver ('navn1','navn2','navn3') Det er meget godt, men jeg
skal have den til at spytte navnene ud på de data der ligger bag efter.
Jeg har prøvet med keys(%settings{'navn1'}) og forventede ('data1','data2',
.... 'data6'), men den hopper bare op med en syntax error.
Er der der ved hvad jeg gør forkert?
Christian@Dannesboe.dk
| |
Adam Sjøgren (11-05-2002)
| Kommentar Fra : Adam Sjøgren |
Dato : 11-05-02 17:46 |
|
On Sat, 11 May 2002 18:24:56 +0200, Christian Dannesboe wrote:
> $settings{'navn1'}{'data1'}="1"; $settings{'navn1'}{'data2'}="2";
[...]
> Er der der ved hvad jeg gør forkert?
Prøv: print join ", ", keys(%{$settings{navn1}});
?
De første sætninger kan skrives meget pænere:
my %settings=(
navn1 => {
data1=>1,
data2=>2,
data3=>3,
data4=>4,
data5=>5,
data6=>6,
},
navn2 => {
data1=>7,
data2=>8,
data3=>9,
data4=>10,
},
navn3 => {
data1=>11,
data2=>12,
data3=>13,
data4=>14,
data5=>15,
data6=>16,
},
);
Så bliver det også klarere hvad er er referencer og hvad der ikke er.
Mvh.
--
"It's beautiful! And I certainly hope Adam Sjøgren
my parents hate this album!" asjo@koldfront.dk
| |
Peter Makholm (11-05-2002)
| Kommentar Fra : Peter Makholm |
Dato : 11-05-02 17:56 |
|
"Christian Dannesboe" <Christian@Dannesboe.dk> writes:
> $settings{'navn1'}{'data1'}="1";
> $settings{'navn1'}{'data2'}="2";
> $settings{'navn1'}{'data3'}="3";
Perl understøtter ikke multidimensionelle hash-strukturer direkte. Det
der i virkeligheden sker er at $settings{navn1} kommer til at
indeholde en reference til en hash med nøglerne data1, data2, data3 etc.
> Jeg har prøvet med keys(%settings{'navn1'}) og forventede ('data1','data2',
> ... 'data6'), men den hopper bare op med en syntax error.
Prøv med 'keys(%{$settings{navn1}})'.
--
Peter Makholm | Emacs is the only modern general-purpose
peter@makholm.net | operating system that doesn't multitask
http://hacking.dk |
| |
Lars Balker Rasmusse~ (11-05-2002)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 11-05-02 18:28 |
|
"Christian Dannesboe" <Christian@Dannesboe.dk> writes:
> Jeg kan ikke få perl til at spytte navnene ud med keys funktionen. Problemet
> er at jeg har en hash i en hash
Nej. Du har en hash med referencer til en hash.
> $settings{'navn1'}{'data1'}="1";
> $settings{'navn1'}{'data2'}="2";
> $settings{'navn1'}{'data3'}="3";
> $settings{'navn1'}{'data4'}="4";
> $settings{'navn1'}{'data5'}="5";
> $settings{'navn1'}{'data6'}="6";
> $settings{'navn2'}{'data1'}="7";
> $settings{'navn2'}{'data2'}="8";
> $settings{'navn2'}{'data3'}="9";
> $settings{'navn2'}{'data4'}="10";
> $settings{'navn3'}{'data1'}="11";
> $settings{'navn3'}{'data2'}="12";
> $settings{'navn3'}{'data3'}="13";
> $settings{'navn3'}{'data4'}="14";
> $settings{'navn3'}{'data5'}="15";
> $settings{'navn3'}{'data6'}="16";
Den bedste måde at skrive det på er:
%settings = (
navn1 => {
data1 => "1",
data2 => "2",
data3 => "3",
data4 => "4",
data5 => "5",
data6 => "6"
},
navn2 => {
data1 => "7",
data2 => "8",
data3 => "9",
data4 => "10"
},
navn3 => {
data1 => "11",
data2 => "12",
data3 => "13",
data4 => "14",
data5 => "15",
data6 => "16"
}
);
Bemærk brugen af { }, der laver en anonym reference til en hash.
Læs "perldoc perlref" og "perldoc perlreftut"
> keys(%settings) giver ('navn1','navn2','navn3') Det er meget godt, men jeg
> skal have den til at spytte navnene ud på de data der ligger bag efter.
>
> Jeg har prøvet med keys(%settings{'navn1'}) og forventede ('data1','data2',
> ... 'data6'), men den hopper bare op med en syntax error.
$setting{navn1} er en reference til en hash. Konverter den til en
hash før du bruger den som en.
keys(%{$setting{navn1}} giver 'data1'..'data6'.
For at tilgå data, kan du bruge $setting{navn1}->{data1} i stedet for
den knap så mundrette ${$setting{navn1}}{data1}.
--
Lars Balker Rasmussen "S.M.R.T."
| |
Thorbjørn Ravn Ander~ (11-05-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 11-05-02 18:45 |
|
Lars Balker Rasmussen <lars@balker.org> writes:
> Nej. Du har en hash med referencer til en hash.
Dagens reklame: Data::Dumper er rigtig god til at hitte ud af hvad det
egentlig er man har fingre i i en variabel. Specielt med komplicede
datastrukturer er det et hit til at faa sat alle $-tegnene de rigtige
steder.
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn
| |
Christian Dannesboe (11-05-2002)
| Kommentar Fra : Christian Dannesboe |
Dato : 11-05-02 20:42 |
|
Tak, tak tak. Jeg har fået det til at køre nu
Christian@Dannesboe.dk
| |
|
|