2012-09-07 17 views
6

Ich versuche nur, ein bisschen Perl zu lernen und habe über diese kommen:aufeinander folgende Operatoren und Klammern

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

Zu meinem Neuling Augen, diese lauten: „für jedes Element in einem Array namens @ { $ records}, etwas tun " aber da das scheint ein unwahrscheinlicher Name für ein Array (mit" @{$ "insgesamt), stelle ich mir vor, es ist nicht so einfach?

Ich habe auch "%$" zusammen verwendet. Ich weiß, % bedeutet ein Hash und $ bedeutet ein Skalar, aber nicht wissen, was sie zusammen bedeuten.

Kann jemand Licht auf diese werfen?

Antwort

10

In Perl können Sie einen Verweis haben (ein Zeiger) auf eine Datenstruktur:

# an array 
my @array; 

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

Wenn Sie einen Verweis auf Verwendung das Array Sie dereferenzieren zu müssen in der Lage sein, es

@{ $ref } 

Wenn Sie sich als ein Element zugreifen müssen in

$array[0] 

Sie das gleiche tun können mit einer Referenz

${$ref}[0] 

Die geschweiften Klammern {} sind optional und Sie können auch

$$ref[0] 
@$ref 

verwenden, aber ich persönlich finde sie weniger lesbar.

Das gleiche gilt für jeden anderen Typ (wie %$ für eine Hash-Referenz).

Siehe die man perlref für die Details und man perlreftut für ein Tutorial.

bearbeiten

Der Pfeil Operator -> kann auch zu dereferenzieren ein Array verwendet werden oder ein Hash-

$array_ref->[0] 

oder

$hash_ref->{key} 

Siehe man perlop für Details

+4

Ich bevor um auf eine einzige zuzugreifen Element in einer Array-Referenz mit '$ Array -> [0]' –

+1

@LeonardoHerrera Danke (Ich habe es völlig vergessen, aber es ist es wert, es zu erwähnen, wie es vor allem mit Hashes weit verbreitet ist). Ich habe die Antwort aktualisiert. – Matteo

+1

3 oder gibt es 4 Möglichkeiten, ein Array-Element zu erhalten, wenn eine Array-Referenz angegeben wird. Ich frage mich, wie viele es in Perl 6 gibt? 3 Wege werden ein wenig verwirrend. – Scooter

3

Wenn Sie eine Referenz auf ein Array oder einen Hash haben, würden Sie einen Skalar verwenden, um die Referenz zu halten:

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

Wenn Sie diese Hinweise auf de-reference wollen, würden Sie mit dem Symbol angemessen der Referenztyp:

for my $element (@$aref) { 
} 

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