1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#!/usr/bin/perl use v5.12; #use strict; use warnings; my @daten0 = qw[Blume Baum Pilz Rose Obst Gemüse]; my @daten1 = qw[1 2 3 4 5 6]; my $ref0 = \@daten0; my $ref1 = \@daten1; # Matrix erstellen my @matrix = ($ref0, $ref1); print "Vorher: ".${$matrix[0]}[1]."\n"; # Eintrag ändern ${$matrix[0]}[1] = "Ahornbaum"; print "Nachher: ".${$matrix[0]}[1]."\n"; # Neue Daten-Zeile hinzufügen my @daten2 = qw[Hai Hirsch Käfer Fisch Reh Tiger]; my $ref2= \@daten2; push @matrix, $ref2; print ${$matrix[2]}[-1]."\n"; # Datensätze austauschen/verschieben print "Vorher: ".${$matrix[2]}[3]."\n"; #@daten0,@daten2 = @daten2,@daten0; # funktioniert nicht my @tempdaten = @daten0; @daten0 = @daten2; @daten2 = @tempdaten; print "Nachher: ".${$matrix[2]}[3]."\n";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#!/usr/bin/perl use v5.12; use warnings; my @matrix = ( [qw(Blume Baum Pilz Rose Obst Gemüse)] , [qw(1 2 3 4 5 6)] ); print "Vorher: " . $matrix[0]->[1] . "\n"; # Eintrag ändern $matrix[0]->[1] = "Ahornbaum"; print "Nachher: " . $matrix[0]->[1] . "\n"; # Neue Daten-Zeile hinzufügen push @matrix, [qw(Hai Hirsch Käfer Fisch Reh Tiger)]; print "Letztes Element: " . $matrix[2]->[-1] . "\n"; # Datensätze austauschen/verschieben print "Vorher: " . $matrix[2]->[3] . "\n"; ($matrix[0], $matrix[2]) = ($matrix[2], $matrix[0]); print "Nachher: " . $matrix[2]->[3] . "\n";
2013-09-27T21:20:20 payxZeile 8, 9 und 22: qw üblicherweise mit runden Klammern.
2013-09-27T21:49:06 pq– guten Appetit!my @gemuese = qw/ Zucchini Paprika Champignons Tomaten /;
QuoteCode (perl): (dl )1 2 3 4my @daten0 = qw[Blume Baum Pilz Rose Obst Gemüse]; my @daten1 = qw[1 2 3 4 5 6]; my $ref0 = \@daten0; my $ref1 = \@daten1;
1 2 3
my $ref0 = [qw(Blume Baum Pilz Rose Obst Gemüse)]; my $ref1 = [qw[1 2 3 4 5 6]]; my $ref2 = [1, 2, 3];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use warnings; use strict; my @matrix = (["Blume", "Baum", "Pilz", "Rose", "Obst", "Gemüse"], [1, 2, 3, 4, 5, 6]); print "Vorher: ".$matrix[0][1]."\n"; # Eintrag ändern $matrix[0][1] = "Ahornbaum"; print "Nachher: ".$matrix[0][1]."\n"; # Neue Daten-Zeile hinzufügen push(@matrix, ["Hai", "Hirsch", "Käfer", "Fisch", "Reh", "Tiger"]); print $matrix[2][1]."\n";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/env python # coding: iso-8859-1 matrix = [["Blume", "Baum", "Pilz", "Rose", "Obst", "Gemüse"], [1, 2, 3, 4, 5, 6]] print "Vorher: " + matrix[0][1] # Eintrag ändern matrix[0][1] = "Ahornbaum" print "Nachher: " + matrix[0][1] # Neue Daten-Zeile hinzufügen matrix.append(["Hai", "Hirsch", "Käfer", "Fisch", "Reh", "Tiger"]) print matrix[2][1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use strict; use warnings; use Data::Dumper; my $table = [ { name => 'Rost', vname => 'Rolf', plz => '55276', ort => 'Oppenheim', }, { name => 'Haselhuhn', vname => 'Horst', plz => '12345', ort => 'Henneberg', }, ]; # direkte Adressierbarkeit der Felder über Index und Feldname $table->[1]->{plz} = 99999; $table->[1]{plz} = 99999; # dasselbe wie oben, der erste Pfeil reicht print Dumper $table;
1 2 3 4 5 6 7 8 9 10
# Direkte Adressierbarkeit nutzen für Sortierungen foreach my $addr( sort{ $a->{plz} cmp $b->{plz} } @$table ){ printf qq( Name: %s Vorname: %s Ort: %s PLZ: %s ), $addr->{name}, $addr->{vname}, $addr->{ort}, $addr->{plz}; }
1 2 3 4 5 6 7 8 9 10
# Hash Slice zum rausholen der Werte in der richtigen Reihenfolge foreach my $addr( sort{ $a->{plz} cmp $b->{plz} } @$table ){ my %h = %{$addr}; printf qq( Name: %s Vorname: %s Ort: %s PLZ: %s ), @h{qw(name vname ort plz)}; }
2013-09-28T09:32:06 rostiMehrdimensionale Arrays sind nicht immer zweckmäßig. Für Tabellen bevorzuge ich den Slice. Das ist eine Liste mit Hash-Referenzen
Quoterosti benutzt das wort slice schon ewig hier mit seiner eigenen interpretation...
2013-09-28T10:43:06 rostiQuoterosti benutzt das wort slice schon ewig hier mit seiner eigenen interpretation...
Tja, das liegt daran, dass unsere deutsche Sprache einfach zu arm an Begriffen ist, um komplexe Vorgänge mit einfachen Worten darstellen zu können ;)
QuoteIroni? Leider nicht, leider Alltag. Wir können uns vortrefflich darüber streiten, ob ich den Begriff Slice für eine "Liste mit Hash-Referenzen" benutzen darf oder nicht.
QuoteIch finde das durchaus legitim, weil Fakt ist, dass Autoren anderer Publikationen, genau dasselbe tun, nämlich: den Begriff Slice für eine "Liste mit Hash-Referenzen" benutzen. Und das nicht nur in perldoc DBI ;)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl use v5.12; use warnings; my %matrix = ( Pflanzen => [qw(Blume Baum Pilz Rose Obst Gemüse)] , Zahlen => [qw(1 2 3 4 5 6)] ); # Eintrag ändern print "Vorher: " . $matrix{Pflanzen}->[1] . "\n"; $matrix{Pflanzen}->[1] = "Ahornbaum"; print "Nachher: " . $matrix{Pflanzen}->[1] . "\n"; # Neue Daten-Zeile hinzufügen $matrix{Viecher} = [qw(Hai Hirsch Käfer Fisch Reh Tiger)]; print "Letztes Element: " . $matrix{Viecher}->[-1] . "\n"; # Datensätze austauschen/verschieben print "Vorher: " . $matrix{Viecher}->[3] . "\n"; ($matrix{Pflanzen}, $matrix{Viecher}) = ($matrix{Viecher}, $matrix{Pflanzen}); # hier natürlich nicht sinnvoll print "Nachher: " . $matrix{Viecher}->[3] . "\n";
2013-09-28T09:32:06 rostiUnd überhaupt: Ich finde es bedauerlich, dass die Diskussion hier so sinnlos ausufert.
QuoteIch zeige Euch hier Beispiele aus meiner täglichen Praxis (die sich mehr als nur einmal bewährt haben!)
Quoteund schon werde ich angefeindet. Woher kommt dieser Hass!?
QuoteEs gibt auch in Perl immer wieder Neues zu entdecken, und da meine ich immer noch v5.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/perl use v5.12; use warnings; my @matrix = (["A1", "A2", "A3", "A4", "vw", "A5"], ["B1", "B2", "B3", "B4", "skoda", "B6"], ["C1", "C2", "C3", "C4", "scoda", "C6"], ["D1", "D2", "D3", "D4", "toyota", "D6"], ["E1", "E2", "E3", "E4", "ford", "E6"], ["F1", "F2", "F3", "F4", "renault", "F5"] ); sub bubble_sort{my $spalte = shift; my $getauscht = 0; my $zaehler = 0; for my $j (0..$#matrix){ for my $i (0..$#matrix-1){ if ($matrix[$i]->[$spalte] gt $matrix[$i+1]->[$spalte]){ ($matrix[$i], $matrix[$i+1]) = ($matrix[$i+1], $matrix[$i]); $getauscht = 1; $zaehler++; } } if (!$getauscht){last;} } say "\n\nSuch-Durchgaenge $zaehler"; } say "Vor dem Sortieren"; for my $i (0..5){ say "$matrix[$i]->[0] > $matrix[$i]->[4]"; } bubble_sort(4); # "4" weil die Matrix nach der Spalte 4 sortiert werden soll say "\n\nNach dem Sortieren"; for (my $i=0; $i<=5; $i++){ say "$matrix[$i]->[0] > $matrix[$i]->[4]"; } print "\n\n";