Übersicht || 0:Vor | 1:Ge | 2:Theo | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B:Tab | C: Tour | D:Delta | E:Links
Diese Tour soll Appetit auf Perl6 machen. Dazu stellen ich jedesmal links ein Stück Perl5-Code neben ein funktionsgleiches Stück Perl6-Code rechts, um die besten Veränderungen der Sprache selbsterklärend herauszustellen.

                 Perl 5                                         Perl 6
                ========                                       ========

Kommandozeile

print "bananas are good\n";                         say "bananas are good";
print "und ich sagte: ".$zitate{\"mir\"}.".\n";     say "und ich sagte: %zitate{"mir"}.";
print "und ich sagte: ".$zitate{\"mir\"}.".\n";     say "und ich sagte: %zitate<mir>.";
print "Was ist ... ";                               $ergebnis = prompt "Was ist ... ";
chomp($ergebnis = <STDIN>);

Datei IO

$inhalt = do { local $/;                            $inhalt = slurp "gedichte.txt";
    open my $FH, "poetry.txt"; <$FH>
};

chomp(@inhalt = do {                                @inhalt = lines "gedichte.txt";
    open my $FH, "poetry.txt"; <$FH>
});
Gab es bisher nur mit "use File::Slurp".

paralleles rechnen

$summe += $_ for @zahlen;                           $summe = [+] @zahlen;
for (0..$#faktor1){                                 @produkt = @faktor1 >>*<< @faktor2;
    $produkt[$_] = $faktor1[$_] * $faktor2[$_];
}
Der Perl5code ist eine Vereinfachung, natürlich tut Perl6 "das Richtige" wenn die Arrays unterschiedlich lang sind.

Vergleiche

if ($a == 3 or $a == 4 or $a == 7) {}               if $a == 3|4|7  {}
if (4 < $a and $a < 12)            {}               if 4 < $a < 12  {}
if (4 < $a and $a <= 12)           {}               if $a ~~ 4^..12 {}
$a = defined $b ? $b : $c;                          $a = $b // $c;

Das waren Junctions, dann verkettete (chained) Vergleichsoperatoren und der defined-OR Operator.

Caseanweisung

                                                     given $a {
if     ($a = 2 or $a = 5)   {}                           when  2 | 5  {...}
elseif ($a = 6 or $a = 7 or $a = 8 or $a = 9)   {}       when  6..9  {...}   
elseif ($a=~/g/) {}                                      when 'g' {...}
else             {}                                      default  {...} 
                                                     }
es ist klarer zu lesen sehr vielseitig und grad in Verbindung mit junctions noch übersichtlicher.

mächtige for Schleifen

for  my $i (1..15)          {}                      for 1..15        -> $i {...}
for (my $i=15; $i>1; $i-=2) {}                      for 15,*-2...1 -> $i {...}
for my $key (keys %hash) {                          for %hash.kv -> $key, $value {
    print "$key => $hash{$key}\n"                       say "$key => $value"
}                                                   }
for  my $i (0..$#a)         {                       for zip(@a; @b; @c) -> $a, $b, $c {...}
    my $a = @a[$i];
    my $b = @b[$i];
    my $c = @c[$i];
}

benannte Parameter in Subroutinen

sub routine {                                       sub routine ($a, $b, *@rest) {...} 
    my $a = shift;
    my $b = shift;
    my @rest = @_;
}
Alle Variablen in Signatur sind automatisch lexikalisch wie mit my deklariert.

Objekte mit autogenerierten new, gettern und settern:

package Heart::Gold;                                class Heart::Gold {
                                                        has $.speed;
sub new {                                               method stop   { $speed = 0 }
    bless {speed => 0 }, shift;                     }    
}                                                   
                                                    my Heart::Gold $hg1 .= new;
sub speed {                                         $hg1.speed = 100;   
  my $self = shift;                                 my $hg2 = $hg1.clone;      
  my $speed = shift;
  if ($speed) { $self->{speed} = $speed }
  else        { $self->{speed} }
}

sub stop { 
  my $self = shift; 
  $self->{speed} = 0;
}

getter, setter, new und clone Methoden werden autogeneriert.


Übersicht || 0:Vor | 1:Ge | 2:Theo | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B: Tab | C: Tour | D:Delta | E:Links

-- HerbertBreunung - 03 May 2006
Topic revision: r30 - 2010-08-31 - 14:26:53 - HerbertBreunung
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.