perl 5 quiz chemnitz edition

Post on 05-Dec-2014

414 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Extra brutales quiz, rund um Perl 5.16, Introspektion, und einige kaum beachtete Nischen von Perl 5

TRANSCRIPT

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

top related