| Perl-Basics | Perl-Enhanced | ||
|---|---|---|---|
Tips und Tricks zu Perl
Datenstrukturen
Listen/Arrays:
Wie kann man Listen erzeugen?
Hier einige Beispiele zum expliziten Anlegen von Listen:
my @list;
my @list2 = (); # leere Liste
my @list3 = ('item1', 'item2', $item3);
my @list4 = qw(item1 item2 item3 item4);
Falls man die Liste nicht deklarieren will und wenn man nicht mit use strict arbeitet, kann man Listen auch implizit anlegen:
$list5[4] = 'item4'; @list6[4,5] = (1,2);
Hier werden automatisch Listen angelegt, deren Elemente 0 bis 3 nicht definiert sind (=undef), also praktisch zu Beginn eine Lücke haben.
Wie kann man Teile einer Liste kopieren:
my @newList = @list[4..20, 30]; my ($firstElement, @restOfList) = @list; my (@bigList) = (@smallList1, @smallList2); my @reverseList = reverse (@list);
Wie kann man zwei Listen miteinander vergleichen?
Wenn es sich um Listen handelt, die nicht allzuviele Elemente enthalten, funktioniert folgender Ansatz recht gut:
if( "@list1" eq "@list2" ){
print "same\n";
}
else {
print "not the same\n";
} # else
Die Listen werden zu einem String verarbeitet, wobei die einzelnen Elemente mit einem Leerzeichen zusammengefügt werden. Und diese beiden Strings werden dann verglichen.
Wenn man größere Listen vergleichen will, könnte man folgende Möglichkeit wählen:
my $difference = "";
if( $#list1 eq $#list2 ){ # vergleiche Anzahl an Elementen
for my $i (0.. $#list1){
if( $list1[$i] ne $list2[$i] ){ # vergleiche einzelne Elemente
$difference = "nicht";
last; # ueberspringe die restlichen Elemente
} # if
} # for
} # if
else {
$difference = "nicht";
} # else
print "Listen sind $difference identisch\n";
Wie kann man eine oder mehrere Liste in eine Subroutine übergeben?
Indem man eine Listenreferenz darauf bildet, und die dann übergibt.
my @liste = (1,2,3,4,5,6,7,8);
my $listenReferenz = \@liste; # Referenz bilden
&PrintListe($listenReferenz);
sub PrintListe {
my ($localListenReferenz) = @_;
my @localeListe = @$localListenReferenz; # dereferenzieren
foreach (@localeListe){
print $_, "\t";
} # foreach
print "\nOder direkt die Listenreferenz verarbeiten:\n";
foreach (@$localListenReferenz){ # dereferenzierung hier
print $_, "\t";
} # foreach
print "\nOder direkt über Listenreferenz-Indices verarbeiten:\n";
foreach my $i (0..$#$localListenReferenz){
print $localListenReferenz->[$i], "\t";
} # foreach
} # PrintListe
Und nun mit mehreren Listen:
my @liste1 = (1,2,3,4,5,6,7,8);
my @liste2 = (9,10,11,12);
my $listenReferenz1 = \@liste1; # Referenz bilden
&PrintListen($listenReferenz1, \@liste2);
sub PrintListen {
my ($localListenReferenz1, $localListenReferenz2) = @_;
my @localeListe = @$localListenReferenz; # dereferenzieren
foreach (@localeListe, @$localListenReferenz){
print $_, "\t";
} # foreach
} # PrintListe
Siehe auch Einührung in Perl
Letztes Update dieser Seite: Tuesday, 27-Jun-2006 20:36:59 CEST