View
76
Download
0
Category
Preview:
Citation preview
Perl heute
This package has never doneanything and never will doanything. If it changes,that's a bug.Please report it tomst@shadowcat.co.uk where Iwill proceed to ignore it.
2007use feature 'say'; # einesuse feature qw/.../; # mehr
# lexikalische Pragma# viele Neuerungen# neue Regex Engine
2007use feature 'say'; # einesuse feature qw/.../; # mehruse v5.10; # alle# perl -E# viele Neuerungen# neue Regex Engine
2007use feature 'switch';
given ($var) { # setzt $_ when (/^abc/) { … } when ([1..5]) { … } default { ... }}
2013no warnings "experimental::switch";use feature "switch";use v5.18;# perldoc perlexperiment# manche feature sind# experimental
2014
use v5.20;
use feature qw/say stateswitch unicode_strings unicode_evalevalbytes current_sub fc/;
2015use v5.22;# logische operatoren (p6)# graph. & wortgrenzen (re)# use strict für re# refaliases, UTF 7# <<>> double diamond op
Perl 5.18use v5.18;no warnings "experimental::regex_sets";
/(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
Perl 5.18use v5.18;no warnings "experimental::lexical_subs";my sub { … }our sub { … }state sub { … }
Perl 5.20
use v5.20;use feature 'postderef';no warnings "experimental::postderef";
use experimental 'postderef';
Array/S. Kontextmy @array = ('d' .. 'f');say @array; # alle Werte eines Array : d e fsay @array[0,1]; # Teilarray mit zwei Werten : d esay $array[2]; # ein Wert aus gleichen Var.: f
A./Skalar Kontextmy @array = ('d' .. 'f');say @array; # alle Werte eines Array : d e fsay @array[0,1]; # Teilarray mit zwei Werten : d esay $array[2]; # ein Wert aus gleichen Var.: f
my %hash = (a => 1, b => 2, c => 3 );say %hash; # alle Schlüssel & Werte: a 1 b 2 c 3say @hash{'a','b'}; # Werten zweier Schlüssel: 1 2say $hash{'c'}; # Wert des Schlüssels: 3
Pair Slicesmy @array = ('d' .. 'f');my %hash = (a => 1, b => 2, c => 3 );
say %array[0,1]; # im Wechsel Index/Wert: 0 d 1 esay %hash{'a','b'}; # Schlüssel/Wert: a 1 b 2
Pair Slicesmy @array = ('d' .. 'f');my %hash = (a => 1, b => 2, c => 3 );
say %array[0,1]; # im Wechsel Index/Wert: 0 d 1 esay %hash{'a','b'}; # Schlüssel/Wert: a 1 b 2
Perl 6:say @array[0,1] :p; # Ausgabe: 0 => "d" 1 => "e"say %hash<'a','b'> :p; # Ausgabe: "a" => 1 "b" => 2
Pair Slices on Refmy $arrayref = ['d' .. 'f'];my $hashref = {a => 1, b => 2, c => 3 };
say %$arrayref[0,1]; # Index/Wert: 0 d 1 esay %$hashref{'a','b'}; # Schlüssel/Wert: a 1 b 2
Postfix-Deref.
$array[2][7]; # ein Wert, wie bekannt$array[2]->[7]; # dasselbe$array[2]->@[7]; # kein Vorteil soweit
Postfix-Deref.
$array[2][7]; # ein Wert, wie bekannt$array[2]->[7]; # dasselbe$array[2]->@[7]; # kein Vorteil soweit
$array[2]->@[5,6]; # 2 Werte, gleichbedeutend mit:@{$array[2]}[5,6]; # ging bisher nur so$array[2]->%[5,6]; # auch Pair Slices möglich$hash{'a'}->%{'g','e'}; # bei verschachtelten Hashes
Postfix-Deref.
$array[2][7]; # ein Wert, wie bekannt$array[2]->[7]; # dasselbe$array[2]->@[7]; # kein Vorteil soweit
$array[2]->@[5,6]; # 2 Werte, gleichbedeutend mit:@{$array[2]}[5,6]; # ging bisher nur so$array[2]->%[5,6]; # auch Pair Slices möglich$hash{'a'}->%{'g','e'}; # bei verschachtelten Hashes
$array[2]->@* # gesamter Unterarrayinhalt$array[2]->$#* # Anzahl der Elemente
Postfix-Deref. $array[2][7]; # ein Wert, wie bekannt$array[2]->[7]; # dasselbe$array[2]->@[7]; # kein Vorteil soweit
$array[2]->@[5,6]; # 2 Werte, gleichbedeutend mit:@{$array[2]}[5,6]; # ging bisher nur so$array[2]->%[5,6]; # auch Pair Slices möglich$hash{'a'}->%{'g','e'}; # bei verschachtelten Hashes
$array[2]->@* # gesamter Unterarrayinhalt$array[2]->$#* # Anzahl der Elemente$array[2]->*{ARRAY} # GLOB / symbol Tabelle
Postfix-Deref. $array[2][7]; # ein Wert, wie bekannt$array[2]->[7]; # dasselbe$array[2]->@[7]; # kein Vorteil soweit
$array[2]->@[5,6]; # 2 Werte, gleichbedeutend mit:@{$array[2]}[5,6]; # ging bisher nur so$array[2]->%[5,6]; # auch Pair Slices möglich$hash{'a'}->%{'g','e'}; # bei verschachtelten Hashes
$array[2]->@* # gesamter Unterarrayinhalt$array[2]->$#* # Anzahl der Elemente$array[2]->*{ARRAY} # GLOB / symbol Tabelle“$hash{a}->%{g,e}” # sogar interpoliert
Sprachdesign++:
Lesefluss: von links nach rechts
konsistent mit allem Bisherigen
keine Ausnahmen
1 neue Syntaxregel
Signaturen
use experimental 'signatures';
sub sag ($subjekt, $praedikat, $objekt) { say "$subjekt $praedikat $objekt.";}
Signaturen
use experimental 'signatures';
sub sag ($subjekt, $praedikat, $objekt) { say "$subjekt $praedikat $objekt.";}
Signaturenuse experimental 'signatures';
sub sag ($subjekt, $praedikat, $objekt) { my ($sub, $praed, $obj) = @_; say "$subjekt $praedikat $objekt."; say "$sub $praed $obj.";}
Signaturen
sag ( "Du" );sag ( "Du", "hast" );sag ( "Du", "hast", "mich" );sag ( "Du", "hast", "mich", "gefragt" );
Error
sag ( "Du" );sag ( "Du", "hast" );sag ( "Du", "hast", "mich" );sag ( "Du", "hast", "mich", "gefragt" );
Prototypen
use experimental 'signatures';sub :prototype($$;$) ($subjekt, $praedikat, $objekt) { say "$subjekt $praedikat $objekt.";}
Signaturen
use experimental 'signatures';
sub sag ($, $praedikat, $objekt) { say "Ich $praedikat $objekt.";}
Prototyp Attribut
use experimental 'signatures';sub :prototype($$;$) ($subjekt, $praedikat, $objekt) { say "$subjekt $praedikat $objekt.";}
Signaturen
use experimental 'signatures';
sub sag ($subjekt, $ =, $objekt) { say "$subjekt vermutet $objekt.";}
Signaturen
use experimental 'signatures';
sub sag ($subjekt, $praedikat, $ =) { say "$subjekt $praedikat Snowden.";}
Signaturen
use experimental 'signatures';
sub sag ($subjekt, $praedikat, @) { say "$subjekt $praedikat Snowden.";}
“Slurpy” Array
use experimental 'signatures';
sub sag($subjekt, $praedikat,@objekte){ say "$subjekt $praedikat @objekte.";}
“Slurpy” Hash
use experimental 'signatures';
sub sag ($subjekt, %praed_objekt) { say $subjekt, " ", %praed_objekt,".";}
ModuleTask::Kensho,M[o[o[se|ps]]],
Type::Tiny, Try::Tiny,Future, autodie,
Data::Printer, Sereal,IO::All
Mooseauto getter/setter, delegation,defaultwerte, trigger, lazy eval,signaturen, typprüfung,rollen, eigene subtypen,method mod, inside outdelegation,wesentlich mehr Komfort
Mooseauto getter/setter, delegation,defaultwerte, trigger, lazy eval,signaturen, typprüfung,rollen, eigene subtypen,method mod, inside outdelegation,wesentlich mehr Komfort
Mopackage Mo;$VERSION=0.39;
no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.::.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no$_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};@_=(default,@_)if!($#_%2);$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};
M Dokumentation
This package has never doneanything and never will doanything. If it changes,that's a bug.Please report it tomst@shadowcat.co.uk where I willproceed to ignore it.
IO::All$inhalt < io 'datei.txt';$inhalt = io 'datei.txt';$inhalt = io->file('..')->slurp;@inhalte = io->dir('..')->all;$io = io('my/dir/'); # %$io
IO::All
Dateien, Verzeichnisse,Iteratoren, Rückwärts, stat,STDIN, STDOUT, Pipes,
Sockets, DBMPlugins: Mail, LWP
IO::Alluse IO::ALL;
my $socket = io(':80')->fork->accept;$socket->print($_) while <DATA>;$socket->close;
__DATA__<!DOCTYPE html>...
Perl::Critic
Prüft Quellcode
5 Brutalitätsstufen
Basierend auf PBP + C.C.
Eigene Regeln
projektbezogene Regelweke
rxrx
Regex REPL und Debugger
vis. Nav. ASCII, aber bunt
versteht gesamte Perl rx
Damian Conway(Parse::RecDescent)
Recommended