arrays und hashes [perl]
2001-01-1 | 1:14 pm | Kein Kommentar »
Array @liste
$liste[-1] | das letzte Element der Liste |
---|---|
$#liste | maximaler Index / Anzahl der Felder -1 |
$anzahl = @liste | Anzahl der Felder |
push, unshift, shift, pop
push(@liste, „xyz“) | „xyz“ wird hinten angehaengt |
---|---|
unshift(@liste,“abc“) | „abc“ wird vorne eingefuegt |
$x = shift(@liste) | vorderstes Element („abc“) wird entfernt und in die Variable $x geschrieben |
$x = pop(@liste) | hinterstes Element („xyz“) wird entfernt und in die Variable $x geschrieben |
@osterei
$ei->{„name“} = „giftgrünes Osterei“;
$ei->{„img“} = „http://www.remote-island.org/142291/ggO.gif“;
push(@osterei,$ei);
while (scalar(@osterei)) {
$ei = shift(@osterei);
… }
split, join
$string wird aufgesplittet; Trenner ist das Leerzeichen |
|
die Elemente des Arrays @letters werden zu „a_b_c“ zusammengesetzt |
Mehrdimensionales Array
@liste1 = („a“, „b“, „c“);
@liste2 = („k“,“l“, @liste1); # entspricht („k“, „l“, „a“, „b“, „c“)
@liste3 = („k“,“l“, [@liste1]); # 3. Element ist wiederum Liste
Hash %hash
$hash{„key“} = „value“; | |
---|---|
keys(%hash) | erzeugt Liste der Keys des Hashes |
values(%hash) | erzeugt Liste der Values des Hashes |
foreach $key keys(%hash) {
print „$value = $hash{$key}\n“;
}
exists != defined
if (exits $ei{„name“}) … | Abfrage ob der Hash-Key „name“ in %ei vorkommt. |
---|---|
if (defined $ei{„name“}) … | Ein existierender Hash-Eintrag muss nicht definiert sein |
delete $ei{„name“}; | loescht den Eintrag, d.h. er existiert dann nicht mehr! |
$ei{„name“} = „“; | der Eintrag exisitert dann immer noch |
%ei = (); | loescht alle Eintraege |
Vorsicht exists boese
exists legt $h{1} an, wenn man $h1{1}{2} abfragt:
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %h = ();
print Data::Dumper->Dump([\%h],[‚*h‘]);
if(exists $h{‚1‘}) { print „jau\n“; }
print Data::Dumper->Dump([\%h],[‚*h‘]);
if(exists $h{‚1‘}{‚2‘}) { print „jau\n“; }
print Data::Dumper->Dump([\%h],[‚*h‘]);
if(exists $h{‚1‘}) { print „jau\n“; }
Verschachteltes Hash %zahl
Der Value-Eintrag des Hashes %zahl ist wiederum ein Hash
$zahl{$ref}{$url} $zahl{$url}{$ref} |
sind äquivalent |
---|
$zahl{$url}{$ref}++;
foreach $ref (keys(%zahl)) {
foreach $url (keys(%{$zahl{$ref}})) {
$gesamt += $zahl{$ref}{$url};
print „von $ref nach $url: $zahl{$ref}{$url} Besucher\n“;
}
}
print „gesamt = $gesamt \n“;
Verknuepfung ohne Verschachtelung von url und ref zu string mit * als Trennzeichen
$zahl{$ref.“*“.$url}++;
Verschachteltes Hash %hash
Der Value-Eintrag ist wieder ein Hash.
Die unteren Value-Eintraege sind verschieden: Skalare oder Arrays.
%{$hash{„sm“}} | value zum key ist wieder eine hash-table |
---|---|
$hash{„sm“}{„zahl“} | ein Value des inneren Hash |
$hash{„sm“}{„liste“} | ein anderer Value des inneren Hash ist ein Array |
@{$hash{„sm“}{„liste“}}[0] | der erste Wert dieses Arrays |
Eintrag von $blub in diese Liste. wird mit push hinten angehängt |
Verschachteltes Hash %hash
Der Value Eintrag des Hashes ist ein Array.
@{$hash{„blub“}} = („a“, „b“, „c“); | |
---|---|
push (@{$hash{„blub“}}, „d“); | |
@{$hash{„blub“}}[$i] | |
$hash{„blub“}->[$i] |
Hash- und Array-Referenzen
Die Referenz enthält den Namen des Hashes bzw. des Arrays.
Davorsetzen des $-Zeichens bewirkt, dass das Hash bzw. das Array „direkt“ angesprochen wird.
$h{„blub“} | $h->{„blub“} bzw. $$h{‚blub‘} |
---|---|
$a[0] | $a->[0] bzw. $$a[0] |
foreach(keys(%h)){…} | foreach(keys(%$h)){…} |
for($i=0; $i< =$#a; $i++) {…} | for($i=0; $i< =$#$a; $i++) {…} |
for($i=0; $i< =@a; $i++) {…} | for($i=0; $i< =@$a; $i++) {…} |
#!/usr/bin/perl
use Storable “dclone;
$hash{‚huhu‘} = {‚gaga‘};
gibHashAus(\%hash);
hallo(\@a); sub hallo{ my ($array) = @_; $blub = $array->[13]; foreach $i (@$array) {…} } |
hallo(\%h); sub hallo{ my ($hash) = @_; $blub = $hash->{„name“}; foreach $i (keys(%$h) {…} } |
Sag etwas dazu: