Post on 05-Dec-2014
description
Perl Quiz
Kamelbuch
Kamel
Unterm Röntgenblick
Was, ich bin tot?
Perl ist überall
Zeitgemäßes Perl
Perl als Auto
Perl 5 Quiz
Perl 6 unterwegs
Perl 6 ? - Frag mich!
Hochstapler bei der Arbeit
Hochstapler bei der Arbeit
Hochstapler bei der Arbeit
Wikipedia, Perl-Wikis,Perl 6 Tablets
Perl-Magazin, Perlzeitung, heise.de
Vorträge, CPAN-Module, Kephra, WxPerlBuch
Mansfelder Land
Mansfelder Land
Egypt aka Khem
Dresden 2005
2011
5.14.1
11 März 2013
Perl 5.16.3
Mai 2013
Perl 5.18.0
Mai 2012
Perl 5.16.0
Richter
Perl 5.16
Keine Entschuldigung
Perl 5.16App::perlbrew !
Welches deref. nicht ?
each keys
join splice
Welches deref. nicht ?
join
Nicht Bei Jauch
Schwierigkeit: Brutal
Testfrage
Was tut „less“ ?
Das „less“ - Pragma ?
use less '...';
Gibt es das wirklich ?
use less 'memory';
Sicher Digger !
use less 'memory';
if ( less->of( 'CPU' ) ) { ...}elsif ( less->of( 'memory' ) ) { ...}
Antwort:
Nichts(legacy idea)
10 Fragen:
Aktuell: 5Introspektion: 3
Kurios: 2
Fangen Wir An
Frage 1 !
???
Geht Das ?
use v5.16;use v5.8;
say 'Booh';
Leider Ja, ...
use v5.16;use v5.8;
say 'Booh';
..., aber nicht ab 5.18
use v5.16;use v5.8;
say 'Booh';
Geht Das ?
Es Geht !
Geht Das ?
Es Geht (noch) !
Frage 2 !
???
Was macht das ?
$[ = 1;
Wie viele Elemente ?
my @prim;$prim[1] = 2;say scalar @prim;
Erstes hat Index 0
$prim[1] = 2;say scalar @prim;
2
Nun ist 1 Erster
$[ = 1;$prim[1] = 2;say scalar @prim;
1
Unter 5.14
$[ = 1;$prim[1] = 2;say scalar @prim;
1
Unter 5.16
Error
Unter 5.16
use feature 'array_base';
Unter 5.16
use v5.14;
Frage 3 !
???
Wie viele solcher brachte 5.16?
use feature 'array_base';
$[
Wie viele solcher brachte 5.16?
use feature 'fc';
Wie viele solcher brachte 5.16?
use feature 'fc';
fc $str; # fold case
Wie viele solcher brachte 5.16?
use feature 'unicode_eval';
Wie viele solcher brachte 5.16?
use feature 'unicode_eval';
Sieht $str als Unicode
use feature 'unicode_eval';
eval $str;
Sieht $str immer als Bytes
use feature 'evalbytes';
Sieht $str immer als Bytes
use feature 'evalbytes';
evalbytes $str;
Wie viele solcher brachte 5.16?
use feature 'current_sub';
Referenz auf aktuelle sub
use feature 'current_sub';
__SUB__
Geh zurück zu 5.8
use feature ':5.16';
Geh zurück zu 5.8
use feature ':default';
Bedeutet das Gleiche
use feature ':default';
no feature ':all';
Wie viele solcher brachte 5.16?
8
Wie viele solcher brachte :
5.10: 3 (3)5.12: 1 (3)5.14: 0 (1)5.16: 5 (8)
Frage 4 !
???
Was ergibt „undef ~~ %ash“ ?
?
Was macht „undef ~~ %ash“ ?
7 ~~ [2,7,5]
Was macht „undef ~~ %ash“ ?
7 ~~ [2,7,5]
1
Was macht „undef ~~ %ash“ ?
qr/^b/ ~~ ['habe','basta']
1
Was macht „undef ~~ %ash“ ?
undef ~~ [2,undef,5]
Was macht „undef ~~ %ash“ ?
undef ~~ [2,undef,5]
1
Was macht „undef ~~ %ash“ ?
2 ~~ {2 => 5}
Was macht „undef ~~ %ash“ ?
2 ~~ {2 => 5}
1
Was macht „undef ~~ %ash“ ?
undef ~~ {undef => 5}
Was macht „undef ~~ %ash“ ?
undef ~~ {undef => 5}
Key ist 'undef'
Was macht „undef ~~ %ash“ ?
undef ~~ {undef, 5}
Was macht „undef ~~ %ash“ ?
undef ~~ {undef, 5}
trotzdem undef in Str Kontext umgewandelt
Was macht „undef ~~ %ash“ ?
undef ~~ {undef, 5}
5 wird unter '' abgelegt say $h{''};
Was macht „undef ~~ %ash“ ?
undef ~~ {undef, 5}
5 wird unter '' abgelegt undef ne '' (immer)
Was macht „undef ~~ %ash“ ?
Keine Suche kann erfolgreich sein.
Was macht „undef ~~ %ash“ ?
undef
Frage 5 !
???
Wohin geht COMMIT ?
Wohin geht COMMIT ?
COMMIT
Vollständiger Syntax
...(*COMMIT)...
Niemals ohne !
Zero Length Assertion
…($= ...)...…($<= ...)...
...(?(DEFINE) ...)...
Steuern Backtracking...(*ACCEPT)......(*COMMIT)...
...(*FAIL)......(*MARK)...
...(*PRUNE)......(*SKIP)......(*THEN)...
Unterbricht Backtrack
...(*ACCEPT)...
...(*COMMIT)...
Unterbricht Backtrack
# Erfolg...(*ACCEPT)...
# Mißerfolg...(*COMMIT)...
Backtracking
/d(a|ak)ch/
dackel
'h' ne 'k'
/d(a|ak)ch/
'dackel'
Mit COMMIT
/d(a|ak)(*COMMIT)ch/
'dackel'
Mißerfolg
/d(a|ak)(*COMMIT)ch/
'dackel'
Ab 5.10
Bricht Regex während Backtracking als
Mißerfolg ab
Frage 6 !
???
Zähl Rückgabewerte von ref ?
ref …;
Ohne Diese:
ref $obj
'Klassen::Name'
Referenzarten ?
?
Referenzarten ?
SCALAR ARRAY HASH
ref \““ ref [] ref {}
Referenzarten ?
SCALAR ARRAY HASH
CODE REF ““
ref sub {}; ref \\““; ref ““
Referenzarten ?
SCALAR ARRAY HASH
CODE REF ““
ref qx// eq „Regexp“
Referenzarten ?
SCALAR ARRAY HASH
CODE REF ““
ref *var{GLOB} eq “GLOB“
Referenzarten ?
SCALAR ARRAY HASH
CODE REF ““
ref \v5.6 eq “VSTRING“
Namen der Referenzarten ?
““ VSTRING SCALAR ARRAY HASH
IO CODE Regexp Format REF GLOB
11
Wieviele Werte hat ref ?
11
Frage 7 !
???
Ref-Arten in Symboltabelle ?
?
Ref-Arten in Symboltabelle ?
*varname{SCALAR}
Namen der Referenzarten ?
““ VSTRING SCALAR ARRAY HASH
CODE Regexp IO Format REF GLOB
11
Namen der Referenzarten ?
““ VSTRINGSCALAR ARRAY HASH
CODE Regexp IO Format REF GLOB
11
Ref-Arten in Symboltabelle ?
SCALAR ARRAY HASH
CODE Regexp IO FORMAT GLOB
8
Ref-Arten in Symboltabelle ?
SCALAR ARRAY HASH
CODE FORMAT IO GLOB
7
Ref-Arten in Symboltabelle ?
7
Frage 8 !
???
Wie viele Werte liefert caller?
Wie viele Werte liefert caller !
package, filename, line, subroutine,
hasargs, wantarray, evaltext, is_require,
hints, bitmask, hinthash
Wie viele Werte liefert caller !
11
Tip:
say ((caller(0))[0])
Frage 9 !
???
Wozu braucht man -s ?
?
Kommandozeilenparameter
perl -s test.pl -var=2
So NICHT !
perl test.pl -s -var=2
So auch nicht !
perl -s -var=2 test.pl
Nur So !!!
perl -s test.pl -var=2
Im Programm
perl -s test.pl -var=2
say $var;2
var Ist aber global
perl -s test.pl -var=2
also: no strict;
Wozu braucht man -s ?
Zur Einführung von Variablen ins
Programm aus der Shell !
Frage 10 !
Was verändert reset ?
Löscht alle Var
reset 'A-Z'; !!!
Löscht alle Var
keine mit my oder state deklarierten
Löscht alle Var
keine mit my oder state deklarierten
my $d = 5;my $e = *d{SCALAR};say $$e; # kommt nix
Löscht alle Var
keine mit my oder state deklarierten
nur globale oder mit local
Löscht alle Var
keine mit my oder state deklarierten
nur globale oder mit local, our
Globale Abgeschaltet
use v5.12;use strict;
nur globale oder mit local, our
Globale Abgeschaltet
use v5.12;no strict 'refs';
nur globale oder mit local, our
„lokale“ sind legacy
use v5.12;no strict 'refs';
nur globale oder mit local, our
Löscht Var in Symbolt.
reset 'A-Z';# doch ni schlimm?
nur globale oder mit local, our
Löscht Var in Symbolt.
reset 'A-Z';# doch ni schlimm?
löscht auch: %ENV,@INC, @ISA, etc.
Was verändert reset ?
besser: undef $var;
Was verändert reset ?
setzt jede $var aufundef
(Zustand vor Benutzung)
Was verändert reset ?
setzt Variablen in Symboltabelle mit
angegebenen Anfangsbuchstab
en auf undef