Výstup nižšie uvedeného kódu je vždy prázdny. Nie ste si istý, čo robím zle a ocitol by som akúkoľvek pomoc. Ako sa dostanem k hodnotám kľúča v konkrétnom hash v súbore hash?
use strict;
use warnings;
my %dot1 = ("a"=>1,"b"=>2);
my %dot2 = ("a"=>3,"b"=>4);
my %dot3 = ("a"=>5,"b"=>6);
my %dot4 = ("a"=>7,"b"=>8);
my @array = (%dot1,%dot2,%dot3,%dot4);
my %x = $array[2];
my $y = $x->{"a"};
print "$y n";
odpovede:
4 pre odpoveď č. 1Ak chcete poľa hash odkazov, musíte povedať tak explicitne.
my @array = (%dot1, %dot2, %dot3, %dot4);
my %x = %{$array[2]};
my $y = $x{a};
print "$yn";
5 pre odpoveď № 2
Nemáte poľa hashov, Máte pole, ktoré vyzerá ako hash, kde sú kľúče a
a b
budú tam štyrikrát v pomerne náhodnom poradí.
print Dumper @array;
$VAR1 = [
"a",
1,
"b",
2,
"a",
3,
"b",
4,
"a",
5,
"b",
6,
"a",
7,
"b",
8
];
Potom používate $x->{a}
, čo je syntax prijať kľúč a
z hashref $x
, ale iba ste deklarovali hash %a
, To zase prelomí, pretože mu dáte zoznam nepárnych veľkostí jednej hodnoty.
Namiesto toho pridajte odkazy na hash do poľa. Týmto spôsobom získate viacúrovňovú štruktúru údajov namiesto plochého zoznamu. Potom urobte x
variabilný a skalárny $x
.
my %dot1 = ("a"=>1,"b"=>2);
my %dot2 = ("a"=>3,"b"=>4);
my %dot3 = ("a"=>5,"b"=>6);
my %dot4 = ("a"=>7,"b"=>8);
my @array = (%dot1,%dot2,%dot3,%dot4); # here
my $x = $array[2]; # here
my $y = $x->{"a"};
print "$y n";
Toto bude tlačiť 5
.
Mali by ste si prečítať údaje o štruktúrach dát v systéme Windows perlref a perlreftut.
2 pre odpoveď č. 3
Čo chcete urobiť, je pridať odkazy na vaše hash @array
, inak perl vyhodnotí hash v kontexte zoznamu.
my @array = (%dot1,%dot2,%dot3,%dot4);
my $x = $array[2];
my $y = $x->{"a"};
print "$y n";