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 = „das ist ein satz“;
@words = split(/ /, $string);
$string wird aufgesplittet;
Trenner ist das Leerzeichen
@letters = („a“, „b“, „c“);
$string = join(„_“, @letters);
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
push(@{$hash{„sm“}{„liste“}}, $blub); 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: