SlideShare a Scribd company logo
Learning Perl 6
   brian d foy, <brian@stonehenge.com>
  Version 0.6, Nordic Perl Workshop 2007
for the purposes of this tutorial




 Perl 5
 never
existed
Don’t really do this
$ ln -s /usr/local/bin/pugs /usr/bin/perl
Introduction
It’s a completely new language
That other one never existed
Llama 6 is a long way off
This is the basics of the language
Next week it might be different
Basis for this talk
Apocalypses
Exegeses
Synopses
Perl6-Pugs-N-NN
 docs/quickref/data
 examples/
Actual Pugs behavior
Writing programs
you can actually
      run
In 30 minutes, I can cover

  Data
  Variables
  Control structures
  Input / Output
If I had more time

Subroutines
Regular expressions
Using modules
Creating classes, objects, &c.
Getting Pugs
http://www.pugscode.org
Needs Glasgow Haskell Compiler (GHC)
Get the binary builds
 compilation can take a long, long time
 and it eats up your CPU
Making a P6 program
Programs are just text files
Syntax is C like, mostly
 whitespace is not significant, mostly
 statements separated by semicolons
 comments are # to end of line

Use pugs on the shebang line
 #!/usr/local/bin/pugs
 say quot;Hello Worldquot;;
Objects & Methods
Data are objects or nouns
Methods are verbs (actions)
Object.Method

 #!/usr/local/bin/pugs

 quot;Hello Worldquot;.say;
Run from command line
  $ pugs hello.p6
  Hello World

  $ ./hello.p6
  Hello World

  $ pugs -e 'say quot;Hello Worldquot;'
  Hello World

  $ pugs
  pugs> say quot;Hello Worldquot;
  Hello World
  bool::true
Scalars
Scalars are single values

        Numbers

         Strings

        Boolean
Literal numbers
3 3.14 3.14e7 -4.56 0

       123_456

       0b0110

     0o377 0o644

  0xAB 0xDEAD_BEEF
say
say can be used a method
Outputs the value and tacks on a newline
More output stuff later

   quot;Hello Worldquot;.say;

   say quot;Hello Worldquot;;
Arithmetic

2   + 3           5
2   - 3           -1
2   * 3           6
2   / 3           0.66666666...
2   ** 3          8
2   % 3           2
Method call forms
# indirect form
say 3;

# direct form
3.say;

# parens to group
( 10 / 3 ).say;

# / really just a method
(10./(3)).say;
Strings


Sequence of zero or more characters
Perl inter-converts automatically with
numbers
Single quoted strings
'Hello World'.say;

'I said 'Hello World!''.say;

'I need a literal '.say;

q/I don't need to escape/.say;
Double quoted strings
quot;HellotWorldquot;.say;

quot;I said quot;Hello World!quot;quot;.say;

quot;Hello Worldquot;.print; # no newline

quot;Hello Worldnquot;.print;

qq/Hello Worldn/.print;
String concatenation
   ~ stitches strings together
( quot;Helloquot; ~ quot;Worldquot; ).say;
HelloWorld

( quot;Helloquot; ~ quot; quot; ~ quot;Worldquot; ).say;
Hello World
String replication
      x repeats and joins string
( quot;Hiquot; x 3 ).say;        HiHiHi

( quot;Hiquot; x 2.5 ).say;      floor - HiHi

( quot;Hiquot; x -1 ).say;       error!
Booleans


True or False, Yes or No, On or Off, 1 or nothing
Often the result of a comparison
Numeric comparisons
5    <   6   True
5    >   6   False
5   ==   6   False
5   <=   6   True
5   >=   6   False
5   !=   6   True
String comparisons

'fred'   lt   'barney'   False
'fred'   gt   'barney'   True
'fred'   eq   'barney'   False
'fred'   le   'barney'   False
'fred'   ge   'barney'   True
'fred'   ne   'barney'   True
Scalar variables
Stores a single value
Name starts with a letter or underscore,
followed by letters, underscores, or digits
Has a special symbol (sigil) prepended, $
Starts off undefined (absence of value)
We have to assign it a value
Declare with my on first use
Scalar Assignment

my $num = 5;
quot;The number is $numquot;.say;

my $str = quot;Pugsquot;;
quot;Just another $str hacker, quot;.say;
Scalar value type
The ref method gives the type of scalar
 my   $s1   =   5 < 6;
 my   $s2   =   quot;Perlquot;;
 my   $s3   =   6 - 5;
 my   $s4   =   3.14;

 $s1.WHAT;                 Bool
 $s2.WHAT;                 Str
 $s3.WHAT;                 Int
 $s4.WHAT;                 Rat
Standard input

quot;Enter a name> quot;.print;
my $input = (=$*IN).chomp;

quot;Enter another name> quot;.print;
$input = (=<>).chomp;
Control Structures
if-elsif-else
if 5 < 6   { quot;5 less than 6quot;.say }


if 5 > 6   { quot;5 more than 6quot;.say }
else       { quot;5 not more than 6quot;.say }


if 5 < 4    { quot;5 less than 4quot;.say }
elsif 5 > 4 { quot;5 more than 4quot;.say }
else        { quot;5 not more than 4quot;.say }
Complex comparisons
if( 5 < $x < 10 )
  {
  quot;$x is between 5 and 10quot;.say
  }
else
  {
  quot;$x is not between 5 and 10quot;.say
  }
Junctions
my $num   = 5;

if( $num == any( <5 6 7> ) )
  {
  quot;$num is in the setquot;.say
  }
else
  {
  quot;$num is not in the setquot;.say
  }
Expression modifiers
Apply a condition to a single expression


quot;5 is greaterquot;.say if 5 > 6;

quot;5 is lessquot;.say if 5 < 6;
loop
loop ( init; test; increment ){ }

loop ( $i = 1; $i < 10; $i++ ) {
  quot;I can count to $iquot;.say;
  }
   I can   count   to   1
   I can   count   to   2
   I can   count   to   3
   I can   count   to   4
   ...
next
   skips the rest of the block
   goes to next iteration
loop ( $i = 1;    $i < 10; $i++ ) {
  next if $i %    2;
  quot;I can count    to $iquot;.say;
  }
   I can count    to   2
   I can count    to   4
   I can count    to   6
   I can count    to   8
last
   skips the rest of the iterations
   continues after the loop

loop ( $i = 1; $i < 10; $i++ ) {
  last if $i == 5;
  quot;I can count to $iquot;.say;
  }
   I can count to 2
   I can count to 4
   I can count to 6
   I can count to 8
redo
   starts the current iteration again
   uses the same element (if any)

loop {
  quot;Do you like pugs?> quot;.print;
  my $answer = (=$*IN).chomp;

  redo if $answer ne 'yes';
  last;
  }
Number guesser
quot;Guess secret number from 1 to 10quot;.say;
my $secret = rand(10+1).int;

loop {
  quot;Enter your guess> quot;.print;
    my $guess = (=$*IN).chomp;

  if $guess < $secret
    { quot;Too low!quot;.say;    redo }
  elsif $guess > $secret
    { quot;Too high!quot;.say; redo }
  else
    { quot;That's it!quot;.say; last }
  }
Lists & Arrays
Literal Lists
( 1, 2, 3, 4 )

  <a b c d>

 my $x = 'baz'
<<foo bar $x>>
  «foo bar $x»

  ( 1 .. 3 )
( 'a' .. 'z' )
List replication
'f'   xx 4       <f f f f>

<g> xx 6         <g g g g g g>

< a b c > xx 2   < a b c a b c >
Joining elements

<1 2 3 4>.join(' ')   1 2 3 4

<1 3 5 7>.join(':')   1:3:5:7
Ranges
( 4 .. 7 )           < 4 5 6 7 >

( 'a' .. 'e' )       < a b c d e >

reverse 1 .. 3       < 3 2 1 >

( 1 .. 3 ).reverse   < 3 2 1 >
Arrays
Array variables store multiple scalars
Indexes list with integers, starting at 0
Same variable naming rules as a scalar
Special character is @ (think @rray)
Name comes from a separate namespace
Nothing to do with scalar of same name
Array assignment

my @a = < a b c >;

my @a = << a b $c >>

my @a = 1 .. 6;
Bounds
my @r = 37..42;
say quot;Minimum is quot; ~ @r.min;
say quot;Maximum is quot; ~ @r.max;

my @a = < 3 5 9 2 5 0 1 8 4 >;
say quot;Minimum is quot; ~ @a.min;
say quot;Maximum is quot; ~ @a.max;
Array elements
my @a = <a b c d e f g>;

my $first = @a[0];         a

my $last   = @a[-1];       g

my $count = @a.elems;      7

my @slice = @a[0,-1];      < a g >
Unique elements


my @a = <a b c a b d b d>;

my @b = @a.uniq;   < a b c d >
Hyperoperators
    Apply operator pair wise
my @nums   =       1 .. 10;
my @alphas =      'a' .. 'j';

my @stitch = @nums >>~<< @alphas;
< 1a 2b 3c 4d 5e 6f 7g 8h 9i 10j >
my @square = @nums >>*<< @nums;
< 1 4 9 16 25 36 49 64 81 100 >
for
for 1 .. 5 -> $elem {
  quot;I saw $elemquot;.say;
  }

      I   saw   1
      I   saw   2
      I   saw   3
      I   saw   4
      I   saw   5
for
for @ARGS -> $arg {
  quot;I saw $arg on the command linequot;.say;
  }


  I saw fred on the command line
  I saw barney on the command line
  I saw betty on the command line
Hashes
Hash variables
Hash variables stores unordered pairs
Index is the “key”, a unique string
Makes a map from one thing to another
Same naming rules as scalar and array
Special character is % (think %hash)
Name comes from a separate namespace
Nothing to do with scalar, array of same name
Hash elements
my %h = <a 5 b 7 c 3>;

my $a_value = %h{'a'};    5

my $b_value = %h<b>;      7

my $count = %h.elems;     3

my @values = %h{ <b c> }; < 7 3 >

my @values = %h<b c>;     < 7 3 >
my %hash = (
  'fred'   => 'flintstone',
  'barney' => 'rubble',
  );

%hash.say;
  barney rubblefred flintstone
%hash.join(quot;nquot;).say;
  barney rubble
  fred flintstone
Hash keys
my %hash = (
  'fred'   => 'flintstone',
  'barney' => 'rubble',
  );

for %hash.keys -> $key {
  quot;$key: %hash{$key}quot;.say;
  }
 barney: rubble
 fred: flintstone
Hash values
my %hash = (
  'fred'   => 'flintstone',
  'barney' => 'rubble',
  );

for %hash.values -> $value {
  quot;One value is $valuequot;.say;
  }
 One value is rubble
 One value is flintstone
By pairs
my %hash = (
  'fred'   => 'flintstone',
  'barney' => 'rubble',
  );

for %hash.kv -> $key, $value {
  quot;$key ---> $valuequot;.say;
  }
 barney ---> rubble
 fred ---> flintstone
Counting words
my %words;

for =<> -> $line {
  for $line.chomp.split -> $word {
    %words{$word}++;
    }
  }

for %words.kv -> $k, $v {
  quot;$k: $vquot;.say
  }
exists
      True if the key is in the hash
      Does not create the key

my @chars = <fred wilma barney betty>;

my %hash = (
  'fred'   => 'flintstone',
  'barney' => 'rubble',
  );

for @chars -> $char {
  quot;$char existsquot;.say if %hash.exists($char);
  }
delete
    Removes pair from hash
my %hash =   (
  'fred'     => 'flintstone',
  'barney'   => 'rubble',
  'dino'     => undef,
  );

%hash.delete('dino');
%hash.join(quot;nquot;).say;


  barney rubble
  fred flintstone
Input
Output
Standard input
quot;Enter a name> quot;.print;
my $input = (=$*IN).chomp;

quot;Enter another name> quot;.print;
$input = (=<>).chomp;
File input operator
The =<> reads from files from the
command line arguments

  for =<> -> $line {
    quot;Got $linequot;.print;
    }
Opening files to read
my $fh = open( $file, :r );

for =$fh -> $line {
  quot;Got $linequot;.print;
  }
Die-ing
my $file = quot;not_therequot;;

my $fh = open( quot;not_therequot;, :r )
  err die quot;Couldn’t open $file: $!quot;;

for =$fh -> $line {
  quot;Got $linequot;.print;
  }
try
     Catches exceptions

try {
  die quot;I'm dyingquot; if time.int % 2;
  quot;I made itquot;.say;
  };

quot;Error was $!quot;.say if $!;
Standard filehandles
    Default filehandles $*OUT and $*ERR


$*ERR.say( quot;This goes to stderrquot; );

$*OUT.say( quot;This goes to stdoutquot; );
Writing to files
my $file = quot;not_therequot;;

my $fh = open( quot;not_therequot;, :w )
  err die quot;Couldn’t open $file: $!quot;;

print $fh: @stuff;
# $fh.print( @stuff );
try
     Catches exceptions

try {
  die quot;I'm dyingquot; if time.int % 2;
  quot;I made itquot;.say;
  };

quot;Error was $!quot;.say if $!;
Files and Directories
File tests
my $file = quot;file_tests.p6quot;;

quot;Found filequot;.say if $file ~~ :e;
quot;Readable filequot;.say if $file ~~ :r;

my $file_size = $file ~~ :s;
# $file_size = stat($file).size

quot;File size is $file_sizequot;.say;
Other topics
given is like C’s switch (but better)

variable value types

complex data structures

regular expressions - PCRE and new stuff

sorting, string manipulation etc.

subroutines have better calling conventions
Summary

Perl 6 is a new language
It borrows from Perl (and ancestors)
It’s not done yet, but it’s almost usable

More Related Content

What's hot

Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
Andrew Shitov
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
brian d foy
 
The Perl6 Type System
The Perl6 Type SystemThe Perl6 Type System
The Perl6 Type System
abrummett
 
The Magic Of Tie
The Magic Of TieThe Magic Of Tie
The Magic Of Tie
brian d foy
 
Parsing JSON with a single regex
Parsing JSON with a single regexParsing JSON with a single regex
Parsing JSON with a single regex
brian d foy
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
AbhishekSharma2958
 
Perl6 in-production
Perl6 in-productionPerl6 in-production
Perl6 in-production
Andrew Shitov
 
Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6
Andrew Shitov
 
Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)brian d foy
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
XSolve
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
heumann
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of SmartmatchAndrew Shitov
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
garux
 
Perl6 one-liners
Perl6 one-linersPerl6 one-liners
Perl6 one-liners
Andrew Shitov
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16
Ricardo Signes
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Sanketkumar Biswas
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
Mark Baker
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
Jeroen van Dijk
 
Melhorando sua API com DSLs
Melhorando sua API com DSLsMelhorando sua API com DSLs
Melhorando sua API com DSLs
Augusto Pascutti
 
Php functions
Php functionsPhp functions
Php functions
JIGAR MAKHIJA
 

What's hot (20)

Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
 
The Perl6 Type System
The Perl6 Type SystemThe Perl6 Type System
The Perl6 Type System
 
The Magic Of Tie
The Magic Of TieThe Magic Of Tie
The Magic Of Tie
 
Parsing JSON with a single regex
Parsing JSON with a single regexParsing JSON with a single regex
Parsing JSON with a single regex
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
 
Perl6 in-production
Perl6 in-productionPerl6 in-production
Perl6 in-production
 
Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6
 
Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of Smartmatch
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
Perl6 one-liners
Perl6 one-linersPerl6 one-liners
Perl6 one-liners
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
 
Melhorando sua API com DSLs
Melhorando sua API com DSLsMelhorando sua API com DSLs
Melhorando sua API com DSLs
 
Php functions
Php functionsPhp functions
Php functions
 

Similar to Learning Perl 6 (NPW 2007)

Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in Optimization
David Golden
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
NBACriteria2SICET
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
PHP_Lecture.pdf
PHP_Lecture.pdfPHP_Lecture.pdf
PHP_Lecture.pdf
mysthicrious
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to PerlSway Wang
 
Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB jhchabran
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
Lorna Mitchell
 
Cleancode
CleancodeCleancode
Cleancode
hendrikvb
 
Scripting3
Scripting3Scripting3
Scripting3Nao Dara
 
PHP-01-Overview.ppt
PHP-01-Overview.pptPHP-01-Overview.ppt
PHP-01-Overview.ppt
NBACriteria2SICET
 
Modern Perl
Modern PerlModern Perl
Modern Perl
Marcos Rebelo
 
Web 8 | Introduction to PHP
Web 8 | Introduction to PHPWeb 8 | Introduction to PHP
Web 8 | Introduction to PHP
Mohammad Imam Hossain
 
PHP-Overview.ppt
PHP-Overview.pptPHP-Overview.ppt
PHP-Overview.ppt
Akshay Bhujbal
 
Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2Dave Cross
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
Dave Cross
 
Intermediate Perl
Intermediate PerlIntermediate Perl
Intermediate Perl
Dave Cross
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
worr1244
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
Dave Cross
 

Similar to Learning Perl 6 (NPW 2007) (20)

Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in Optimization
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
PHP_Lecture.pdf
PHP_Lecture.pdfPHP_Lecture.pdf
PHP_Lecture.pdf
 
Php & my sql
Php & my sqlPhp & my sql
Php & my sql
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Cleancode
CleancodeCleancode
Cleancode
 
Scripting3
Scripting3Scripting3
Scripting3
 
PHP-01-Overview.ppt
PHP-01-Overview.pptPHP-01-Overview.ppt
PHP-01-Overview.ppt
 
Modern Perl
Modern PerlModern Perl
Modern Perl
 
Web 8 | Introduction to PHP
Web 8 | Introduction to PHPWeb 8 | Introduction to PHP
Web 8 | Introduction to PHP
 
PHP-Overview.ppt
PHP-Overview.pptPHP-Overview.ppt
PHP-Overview.ppt
 
Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Intermediate Perl
Intermediate PerlIntermediate Perl
Intermediate Perl
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
 

More from brian d foy

Conferences for Beginners presentation
Conferences for Beginners presentationConferences for Beginners presentation
Conferences for Beginners presentation
brian d foy
 
20 years in Perl
20 years in Perl20 years in Perl
20 years in Perl
brian d foy
 
PrettyDump Perl 6 (London.pm)
PrettyDump Perl 6 (London.pm)PrettyDump Perl 6 (London.pm)
PrettyDump Perl 6 (London.pm)
brian d foy
 
Dumping Perl 6 (French Perl Workshop)
Dumping Perl 6 (French Perl Workshop)Dumping Perl 6 (French Perl Workshop)
Dumping Perl 6 (French Perl Workshop)
brian d foy
 
Perl v5.26 Features (AmsterdamX.pm)
Perl v5.26 Features (AmsterdamX.pm)Perl v5.26 Features (AmsterdamX.pm)
Perl v5.26 Features (AmsterdamX.pm)
brian d foy
 
Dumping Perl 6 (AmsterdamX.pm)
Dumping Perl 6 (AmsterdamX.pm)Dumping Perl 6 (AmsterdamX.pm)
Dumping Perl 6 (AmsterdamX.pm)
brian d foy
 
6 more things about Perl 6
6 more things about Perl 66 more things about Perl 6
6 more things about Perl 6
brian d foy
 
6 things about perl 6
6 things about perl 66 things about perl 6
6 things about perl 6
brian d foy
 
Perl 5.28 new features
Perl 5.28 new featuresPerl 5.28 new features
Perl 5.28 new features
brian d foy
 
The Surprisingly Tense History of the Schwartzian Transform
The Surprisingly Tense History of the Schwartzian TransformThe Surprisingly Tense History of the Schwartzian Transform
The Surprisingly Tense History of the Schwartzian Transform
brian d foy
 
Perl Power Tools - Saint Perl 6
Perl Power Tools - Saint Perl 6Perl Power Tools - Saint Perl 6
Perl Power Tools - Saint Perl 6
brian d foy
 
The Whitespace in the Perl Community
The Whitespace in the Perl CommunityThe Whitespace in the Perl Community
The Whitespace in the Perl Communitybrian d foy
 
CPAN Workshop, Chicago 2014
CPAN Workshop, Chicago 2014CPAN Workshop, Chicago 2014
CPAN Workshop, Chicago 2014
brian d foy
 
Reverse Installing CPAN
Reverse Installing CPANReverse Installing CPAN
Reverse Installing CPAN
brian d foy
 
Tour of the Perl docs
Tour of the Perl docsTour of the Perl docs
Tour of the Perl docs
brian d foy
 
Create and upload your first Perl module to CPAN
Create and upload your first Perl module to CPANCreate and upload your first Perl module to CPAN
Create and upload your first Perl module to CPAN
brian d foy
 
Perl Conferences for Beginners
Perl Conferences for BeginnersPerl Conferences for Beginners
Perl Conferences for Beginners
brian d foy
 
Backward to DPAN
Backward to DPANBackward to DPAN
Backward to DPAN
brian d foy
 
Perl docs {sux|rulez}
Perl docs {sux|rulez}Perl docs {sux|rulez}
Perl docs {sux|rulez}
brian d foy
 

More from brian d foy (20)

Conferences for Beginners presentation
Conferences for Beginners presentationConferences for Beginners presentation
Conferences for Beginners presentation
 
20 years in Perl
20 years in Perl20 years in Perl
20 years in Perl
 
PrettyDump Perl 6 (London.pm)
PrettyDump Perl 6 (London.pm)PrettyDump Perl 6 (London.pm)
PrettyDump Perl 6 (London.pm)
 
Dumping Perl 6 (French Perl Workshop)
Dumping Perl 6 (French Perl Workshop)Dumping Perl 6 (French Perl Workshop)
Dumping Perl 6 (French Perl Workshop)
 
Perl v5.26 Features (AmsterdamX.pm)
Perl v5.26 Features (AmsterdamX.pm)Perl v5.26 Features (AmsterdamX.pm)
Perl v5.26 Features (AmsterdamX.pm)
 
Dumping Perl 6 (AmsterdamX.pm)
Dumping Perl 6 (AmsterdamX.pm)Dumping Perl 6 (AmsterdamX.pm)
Dumping Perl 6 (AmsterdamX.pm)
 
6 more things about Perl 6
6 more things about Perl 66 more things about Perl 6
6 more things about Perl 6
 
6 things about perl 6
6 things about perl 66 things about perl 6
6 things about perl 6
 
Perl 5.28 new features
Perl 5.28 new featuresPerl 5.28 new features
Perl 5.28 new features
 
The Surprisingly Tense History of the Schwartzian Transform
The Surprisingly Tense History of the Schwartzian TransformThe Surprisingly Tense History of the Schwartzian Transform
The Surprisingly Tense History of the Schwartzian Transform
 
Perl Power Tools - Saint Perl 6
Perl Power Tools - Saint Perl 6Perl Power Tools - Saint Perl 6
Perl Power Tools - Saint Perl 6
 
The Whitespace in the Perl Community
The Whitespace in the Perl CommunityThe Whitespace in the Perl Community
The Whitespace in the Perl Community
 
CPAN Workshop, Chicago 2014
CPAN Workshop, Chicago 2014CPAN Workshop, Chicago 2014
CPAN Workshop, Chicago 2014
 
Reverse Installing CPAN
Reverse Installing CPANReverse Installing CPAN
Reverse Installing CPAN
 
I ❤ CPAN
I ❤ CPANI ❤ CPAN
I ❤ CPAN
 
Tour of the Perl docs
Tour of the Perl docsTour of the Perl docs
Tour of the Perl docs
 
Create and upload your first Perl module to CPAN
Create and upload your first Perl module to CPANCreate and upload your first Perl module to CPAN
Create and upload your first Perl module to CPAN
 
Perl Conferences for Beginners
Perl Conferences for BeginnersPerl Conferences for Beginners
Perl Conferences for Beginners
 
Backward to DPAN
Backward to DPANBackward to DPAN
Backward to DPAN
 
Perl docs {sux|rulez}
Perl docs {sux|rulez}Perl docs {sux|rulez}
Perl docs {sux|rulez}
 

Recently uploaded

Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 

Recently uploaded (20)

Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 

Learning Perl 6 (NPW 2007)

  • 1. Learning Perl 6 brian d foy, <brian@stonehenge.com> Version 0.6, Nordic Perl Workshop 2007
  • 2. for the purposes of this tutorial Perl 5 never existed
  • 3. Don’t really do this $ ln -s /usr/local/bin/pugs /usr/bin/perl
  • 4. Introduction It’s a completely new language That other one never existed Llama 6 is a long way off This is the basics of the language Next week it might be different
  • 5. Basis for this talk Apocalypses Exegeses Synopses Perl6-Pugs-N-NN docs/quickref/data examples/ Actual Pugs behavior
  • 7. In 30 minutes, I can cover Data Variables Control structures Input / Output
  • 8. If I had more time Subroutines Regular expressions Using modules Creating classes, objects, &c.
  • 9. Getting Pugs http://www.pugscode.org Needs Glasgow Haskell Compiler (GHC) Get the binary builds compilation can take a long, long time and it eats up your CPU
  • 10. Making a P6 program Programs are just text files Syntax is C like, mostly whitespace is not significant, mostly statements separated by semicolons comments are # to end of line Use pugs on the shebang line #!/usr/local/bin/pugs say quot;Hello Worldquot;;
  • 11. Objects & Methods Data are objects or nouns Methods are verbs (actions) Object.Method #!/usr/local/bin/pugs quot;Hello Worldquot;.say;
  • 12. Run from command line $ pugs hello.p6 Hello World $ ./hello.p6 Hello World $ pugs -e 'say quot;Hello Worldquot;' Hello World $ pugs pugs> say quot;Hello Worldquot; Hello World bool::true
  • 14. Scalars are single values Numbers Strings Boolean
  • 15. Literal numbers 3 3.14 3.14e7 -4.56 0 123_456 0b0110 0o377 0o644 0xAB 0xDEAD_BEEF
  • 16. say say can be used a method Outputs the value and tacks on a newline More output stuff later quot;Hello Worldquot;.say; say quot;Hello Worldquot;;
  • 17. Arithmetic 2 + 3 5 2 - 3 -1 2 * 3 6 2 / 3 0.66666666... 2 ** 3 8 2 % 3 2
  • 18. Method call forms # indirect form say 3; # direct form 3.say; # parens to group ( 10 / 3 ).say; # / really just a method (10./(3)).say;
  • 19. Strings Sequence of zero or more characters Perl inter-converts automatically with numbers
  • 20. Single quoted strings 'Hello World'.say; 'I said 'Hello World!''.say; 'I need a literal '.say; q/I don't need to escape/.say;
  • 21. Double quoted strings quot;HellotWorldquot;.say; quot;I said quot;Hello World!quot;quot;.say; quot;Hello Worldquot;.print; # no newline quot;Hello Worldnquot;.print; qq/Hello Worldn/.print;
  • 22. String concatenation ~ stitches strings together ( quot;Helloquot; ~ quot;Worldquot; ).say; HelloWorld ( quot;Helloquot; ~ quot; quot; ~ quot;Worldquot; ).say; Hello World
  • 23. String replication x repeats and joins string ( quot;Hiquot; x 3 ).say; HiHiHi ( quot;Hiquot; x 2.5 ).say; floor - HiHi ( quot;Hiquot; x -1 ).say; error!
  • 24. Booleans True or False, Yes or No, On or Off, 1 or nothing Often the result of a comparison
  • 25. Numeric comparisons 5 < 6 True 5 > 6 False 5 == 6 False 5 <= 6 True 5 >= 6 False 5 != 6 True
  • 26. String comparisons 'fred' lt 'barney' False 'fred' gt 'barney' True 'fred' eq 'barney' False 'fred' le 'barney' False 'fred' ge 'barney' True 'fred' ne 'barney' True
  • 27. Scalar variables Stores a single value Name starts with a letter or underscore, followed by letters, underscores, or digits Has a special symbol (sigil) prepended, $ Starts off undefined (absence of value) We have to assign it a value Declare with my on first use
  • 28. Scalar Assignment my $num = 5; quot;The number is $numquot;.say; my $str = quot;Pugsquot;; quot;Just another $str hacker, quot;.say;
  • 29. Scalar value type The ref method gives the type of scalar my $s1 = 5 < 6; my $s2 = quot;Perlquot;; my $s3 = 6 - 5; my $s4 = 3.14; $s1.WHAT; Bool $s2.WHAT; Str $s3.WHAT; Int $s4.WHAT; Rat
  • 30. Standard input quot;Enter a name> quot;.print; my $input = (=$*IN).chomp; quot;Enter another name> quot;.print; $input = (=<>).chomp;
  • 32. if-elsif-else if 5 < 6 { quot;5 less than 6quot;.say } if 5 > 6 { quot;5 more than 6quot;.say } else { quot;5 not more than 6quot;.say } if 5 < 4 { quot;5 less than 4quot;.say } elsif 5 > 4 { quot;5 more than 4quot;.say } else { quot;5 not more than 4quot;.say }
  • 33. Complex comparisons if( 5 < $x < 10 ) { quot;$x is between 5 and 10quot;.say } else { quot;$x is not between 5 and 10quot;.say }
  • 34. Junctions my $num = 5; if( $num == any( <5 6 7> ) ) { quot;$num is in the setquot;.say } else { quot;$num is not in the setquot;.say }
  • 35. Expression modifiers Apply a condition to a single expression quot;5 is greaterquot;.say if 5 > 6; quot;5 is lessquot;.say if 5 < 6;
  • 36. loop loop ( init; test; increment ){ } loop ( $i = 1; $i < 10; $i++ ) { quot;I can count to $iquot;.say; } I can count to 1 I can count to 2 I can count to 3 I can count to 4 ...
  • 37. next skips the rest of the block goes to next iteration loop ( $i = 1; $i < 10; $i++ ) { next if $i % 2; quot;I can count to $iquot;.say; } I can count to 2 I can count to 4 I can count to 6 I can count to 8
  • 38. last skips the rest of the iterations continues after the loop loop ( $i = 1; $i < 10; $i++ ) { last if $i == 5; quot;I can count to $iquot;.say; } I can count to 2 I can count to 4 I can count to 6 I can count to 8
  • 39. redo starts the current iteration again uses the same element (if any) loop { quot;Do you like pugs?> quot;.print; my $answer = (=$*IN).chomp; redo if $answer ne 'yes'; last; }
  • 40. Number guesser quot;Guess secret number from 1 to 10quot;.say; my $secret = rand(10+1).int; loop { quot;Enter your guess> quot;.print; my $guess = (=$*IN).chomp; if $guess < $secret { quot;Too low!quot;.say; redo } elsif $guess > $secret { quot;Too high!quot;.say; redo } else { quot;That's it!quot;.say; last } }
  • 42. Literal Lists ( 1, 2, 3, 4 ) <a b c d> my $x = 'baz' <<foo bar $x>> «foo bar $x» ( 1 .. 3 ) ( 'a' .. 'z' )
  • 43. List replication 'f' xx 4 <f f f f> <g> xx 6 <g g g g g g> < a b c > xx 2 < a b c a b c >
  • 44. Joining elements <1 2 3 4>.join(' ') 1 2 3 4 <1 3 5 7>.join(':') 1:3:5:7
  • 45. Ranges ( 4 .. 7 ) < 4 5 6 7 > ( 'a' .. 'e' ) < a b c d e > reverse 1 .. 3 < 3 2 1 > ( 1 .. 3 ).reverse < 3 2 1 >
  • 46. Arrays Array variables store multiple scalars Indexes list with integers, starting at 0 Same variable naming rules as a scalar Special character is @ (think @rray) Name comes from a separate namespace Nothing to do with scalar of same name
  • 47. Array assignment my @a = < a b c >; my @a = << a b $c >> my @a = 1 .. 6;
  • 48. Bounds my @r = 37..42; say quot;Minimum is quot; ~ @r.min; say quot;Maximum is quot; ~ @r.max; my @a = < 3 5 9 2 5 0 1 8 4 >; say quot;Minimum is quot; ~ @a.min; say quot;Maximum is quot; ~ @a.max;
  • 49. Array elements my @a = <a b c d e f g>; my $first = @a[0]; a my $last = @a[-1]; g my $count = @a.elems; 7 my @slice = @a[0,-1]; < a g >
  • 50. Unique elements my @a = <a b c a b d b d>; my @b = @a.uniq; < a b c d >
  • 51. Hyperoperators Apply operator pair wise my @nums = 1 .. 10; my @alphas = 'a' .. 'j'; my @stitch = @nums >>~<< @alphas; < 1a 2b 3c 4d 5e 6f 7g 8h 9i 10j > my @square = @nums >>*<< @nums; < 1 4 9 16 25 36 49 64 81 100 >
  • 52. for for 1 .. 5 -> $elem { quot;I saw $elemquot;.say; } I saw 1 I saw 2 I saw 3 I saw 4 I saw 5
  • 53. for for @ARGS -> $arg { quot;I saw $arg on the command linequot;.say; } I saw fred on the command line I saw barney on the command line I saw betty on the command line
  • 55. Hash variables Hash variables stores unordered pairs Index is the “key”, a unique string Makes a map from one thing to another Same naming rules as scalar and array Special character is % (think %hash) Name comes from a separate namespace Nothing to do with scalar, array of same name
  • 56. Hash elements my %h = <a 5 b 7 c 3>; my $a_value = %h{'a'}; 5 my $b_value = %h<b>; 7 my $count = %h.elems; 3 my @values = %h{ <b c> }; < 7 3 > my @values = %h<b c>; < 7 3 >
  • 57. my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', ); %hash.say; barney rubblefred flintstone %hash.join(quot;nquot;).say; barney rubble fred flintstone
  • 58. Hash keys my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', ); for %hash.keys -> $key { quot;$key: %hash{$key}quot;.say; } barney: rubble fred: flintstone
  • 59. Hash values my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', ); for %hash.values -> $value { quot;One value is $valuequot;.say; } One value is rubble One value is flintstone
  • 60. By pairs my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', ); for %hash.kv -> $key, $value { quot;$key ---> $valuequot;.say; } barney ---> rubble fred ---> flintstone
  • 61. Counting words my %words; for =<> -> $line { for $line.chomp.split -> $word { %words{$word}++; } } for %words.kv -> $k, $v { quot;$k: $vquot;.say }
  • 62. exists True if the key is in the hash Does not create the key my @chars = <fred wilma barney betty>; my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', ); for @chars -> $char { quot;$char existsquot;.say if %hash.exists($char); }
  • 63. delete Removes pair from hash my %hash = ( 'fred' => 'flintstone', 'barney' => 'rubble', 'dino' => undef, ); %hash.delete('dino'); %hash.join(quot;nquot;).say; barney rubble fred flintstone
  • 65. Standard input quot;Enter a name> quot;.print; my $input = (=$*IN).chomp; quot;Enter another name> quot;.print; $input = (=<>).chomp;
  • 66. File input operator The =<> reads from files from the command line arguments for =<> -> $line { quot;Got $linequot;.print; }
  • 67. Opening files to read my $fh = open( $file, :r ); for =$fh -> $line { quot;Got $linequot;.print; }
  • 68. Die-ing my $file = quot;not_therequot;; my $fh = open( quot;not_therequot;, :r ) err die quot;Couldn’t open $file: $!quot;; for =$fh -> $line { quot;Got $linequot;.print; }
  • 69. try Catches exceptions try { die quot;I'm dyingquot; if time.int % 2; quot;I made itquot;.say; }; quot;Error was $!quot;.say if $!;
  • 70. Standard filehandles Default filehandles $*OUT and $*ERR $*ERR.say( quot;This goes to stderrquot; ); $*OUT.say( quot;This goes to stdoutquot; );
  • 71. Writing to files my $file = quot;not_therequot;; my $fh = open( quot;not_therequot;, :w ) err die quot;Couldn’t open $file: $!quot;; print $fh: @stuff; # $fh.print( @stuff );
  • 72. try Catches exceptions try { die quot;I'm dyingquot; if time.int % 2; quot;I made itquot;.say; }; quot;Error was $!quot;.say if $!;
  • 74. File tests my $file = quot;file_tests.p6quot;; quot;Found filequot;.say if $file ~~ :e; quot;Readable filequot;.say if $file ~~ :r; my $file_size = $file ~~ :s; # $file_size = stat($file).size quot;File size is $file_sizequot;.say;
  • 76. given is like C’s switch (but better) variable value types complex data structures regular expressions - PCRE and new stuff sorting, string manipulation etc. subroutines have better calling conventions
  • 77. Summary Perl 6 is a new language It borrows from Perl (and ancestors) It’s not done yet, but it’s almost usable