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.
@array = ();
$subs{mainContent}= join"",substitute(@whatToPrint) oder: { local $"; $subs{mainContent} = "@{[substitute (@whatToPrint)]}";}
%hash=(); for(@array){$hash{$_}=1} @array=keys(%hash);
Indexnummer beim durchlaufen eines Arrays mit foreach feststellen: a) foreach my $zeile ( @array ) { # ... Kein Zugriff auf Zeilenzahlen... $zeilenzahl++; # jetzt aber doch.... b) foreach my $index ( 0..$#array ) { # jetzt Zeilenzahlen... $array[$index] # Zugriff auf den aktuellen Slot....
my @newList = @list[4..20, 30]; my ($firstElement, @restOfList) = @list; my (@bigList) = (@smallList1, @smallList2); my @reverseList = reverse (@list);
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"); }
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 } } } else { $difference = "nicht"; } print ("Listen sind $difference identisch\n");
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"; } print "\nOder direkt die Listenreferenz verarbeiten:\n"; foreach (@$localListenReferenz){ # dereferenzierung hier print $_, "\t"; } print "\nOder direkt über Listenreferenz-Indices verarbeiten:\n"; foreach my $i (0..$#$localListenReferenz){ print $localListenReferenz->[$i], "\t"; } } # 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"; } } # PrintListe
my @zahlen = 1 .. 10; print "die letzte zahl ist die $zahlen[-1]\n"; #Ausgabe: #die letzte zahl ist die 10
for my $cnt ( 0 .. $#array ) { ...