2012-09-07 12 views
6

Po prostu staram się nauczyć trochę Perlu i natknąć to:kolejnych operatorów i wsporniki

foreach $element (@{$records}) 
{ 
    do something; 
} 

Do moich oczach początkujących, to brzmi: „dla każdego elementu w tablicy o nazwie @ { $ records}, zrób coś " , ale ponieważ wydaje się to nieprawdopodobną nazwą tablicy (z" @{$ "w ogóle), wyobrażam sobie, że to nie jest takie proste?

Znam również "%$" używane razem. Wiem, że % oznacza skrót i $ oznacza skalar, ale nie wiem, co oznaczają razem.

Czy ktoś może rzucić na nie jakiekolwiek światło?

Odpowiedz

10

W Perl można mieć odniesienia (wskaźnik) do struktury danych:

# an array 
my @array; 

# a reference to an array 
my $ref = \@array; 

Kiedy masz odniesienie móc użytku tablicy trzeba dereference to

@{ $ref } 

Jeśli chcesz uzyskać dostęp do elementu jak w

$array[0] 

można zrobić to samo z odniesieniem

${$ref}[0] 

Kręcone nawiasy {} są opcjonalne możesz także użyć tego samego, ale ja osobiście uważam je za mniej czytelne.

To samo dotyczy każdego innego typu (jako %$ dla odniesienia do skrótu).

Aby uzyskać szczegółowe informacje, zobacz man perlref i man perlreftut dla samouczka.

Edit

Strzałka operator -> mogą być również wykorzystywane do nieprawidłowego tablicę lub hash

$array_ref->[0] 

lub

$hash_ref->{key} 

Zobacz man perlop szczegółowe informacje

+4

Wolę aby uzyskać dostęp do singla element w odwołaniu do tablicy z '$ tablica -> [0]' –

+1

@LeonardoHerrera Dzięki (zupełnie zapomniałem, ale warto o tym wspomnieć, ponieważ jest on szeroko stosowany, szczególnie w przypadku skrótów). Zaktualizowałem odpowiedź. – Matteo

+1

3 lub czy jest to 4 sposoby na uzyskanie elementu tablicy po podaniu odwołania do tablicy. Zastanawiam się, ilu jest w Perlu 6? 3 sposoby stają się trochę mylące. – Scooter

3

Jeśli masz odniesienie do tablicy lub hash, należałoby użyć skalar trzymać odniesienie:

my $href = \%hash; 
my $aref = \@array; 

Gdy chcesz de odniesienie tych odniesień, jakich można używać symbolu odpowiedniego dla typ referencyjny:

for my $element (@$aref) { 
} 

for my $key (keys %$href) { 
}