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.16
App::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: 5
Introspektion: 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 ?

       ““ VSTRING
   SCALAR 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 auf
       undef
   (Zustand vor
    Benutzung)
Was verändert reset ?
setzt Variablen in
Symboltabelle mit
 angegebenen
Anfangsbuchstab
  en auf undef

Perl 5 Quiz Chemnitz Edition