129
I, For One, Welcome Our New Perl6 Overlords Josh Heumann

I, For One, Welcome Our New Perl6 Overlords

  • Upload
    heumann

  • View
    2.609

  • Download
    1

Embed Size (px)

DESCRIPTION

An introduction to (some of) the many Perl6 modules on CPAN today, and what you can do with them.

Citation preview

Page 1: I, For One, Welcome Our New Perl6 Overlords

I, For One, Welcome Our New Perl6 Overlords

Josh Heumann

Page 2: I, For One, Welcome Our New Perl6 Overlords
Page 3: I, For One, Welcome Our New Perl6 Overlords
Page 4: I, For One, Welcome Our New Perl6 Overlords
Page 5: I, For One, Welcome Our New Perl6 Overlords

Perl6::________Perl6::AttributesPerl6::Bible Perl6::BindingPerl6::BuiltinsPerl6::CallerPerl6::ClassesPerl6::CommentsPerl6::ContextsPerl6::CurryingPerl6::DocPerl6::ExportPerl6::FormPerl6::GatherPerl6::Interpolate

Perl6::JunctionPerl6::ParametersPerl6::PerlPerl6::Perldoc Perl6::PlaceholdersPerl6::PugsPerl6::RolePerl6::Rules Perl6::SayPerl6::SlurpPerl6::Subs Perl6::TokenerPerl6::Variables

Page 6: I, For One, Welcome Our New Perl6 Overlords
Page 7: I, For One, Welcome Our New Perl6 Overlords
Page 8: I, For One, Welcome Our New Perl6 Overlords

Perl6::Variables

Page 9: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables;

my @change_agents = ( 'consultancy', 'downsizing', 'knowledge management');

Page 10: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables;

my @change_agents = ( 'consultancy', 'downsizing', 'knowledge management');

print @change_agents[0];

Page 11: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables;

my @change_agents = ( 'consultancy', 'downsizing', 'knowledge management');

print @change_agents[0];

print @change_agents[1..2];

Page 12: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables;

my @change_agents = ( 'consultancy', 'downsizing', 'knowledge management');

print @change_agents[0];

print @change_agents[1..2];

# compile errorprint $change_agents[0];

Page 13: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

%salaries = ( programmer => 77_000, dept_head => 90_000, ceo => 220_000,);

Page 14: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

%salaries = ( programmer => 77_000, dept_head => 90_000, ceo => 220_000,);

print %salaries{ programmer };

Page 15: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

%salaries = ( programmer => 77_000, dept_head => 90_000, ceo => 220_000,);

print %salaries{ programmer };

print $salaries{ ceo }; # compile error

Page 16: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

# references$products = \@products;$benefits = \%benefits;

Page 17: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

# references$products = \@products;$benefits = \%benefits;

print $products.[ 2 ];print $benefits.{ ceo };

Page 18: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

# references$products = \@products;$benefits = \%benefits;

print $products.[ 2 ];print $benefits.{ ceo };

# doesn't exist, still undefprint $benefits.{ peon };

Page 19: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

# you can slice@fired = @employees[ 1..2 ];

Page 20: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Variables; # cont’d

# you can slice@fired = @employees[ 1..2 ];

# you can diceprint %benefits{ ceo => 'janitor' };print %benefits{ 'manager', 'cto' };print %benefits{ qw(programmer designer) };

Page 21: I, For One, Welcome Our New Perl6 Overlords

Perl6::Junction

Page 22: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all none /;

Page 23: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all none /;

# does anyone care?if( all( @level_of_interest ) < 0 ) { print 'review critical success factors';}

Page 24: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all none /;

# does anyone care?if( all( @level_of_interest ) < 0 ) { print 'review critical success factors';}

# who is at this meeting?if( none( @attendee_rank ) eq 'boss' ) { print “let’s get some work done”;}

Page 25: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any one /;

Page 26: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any one /;

# any questions?if( any( @hands ) eq 'up' ) { print 'more synergising!';}

Page 27: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any one /;

# any questions?if( any( @hands ) eq 'up' ) { print 'more synergising!';}

if( one( @types ) eq 'highlander' ) { print 'there can be only one';}

is any( one @listening ), '?';

Page 28: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any all none one/;

# ok#'<', '<=', '>', '>=', '==', '!=',#'lt', 'le', 'gt', 'ge', 'eq', 'ne',

Page 29: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any all none one/;

# ok#'<', '<=', '>', '>=', '==', '!=',#'lt', 'le', 'gt', 'ge', 'eq', 'ne',

Page 30: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ any all none one/;

# ok#'<', '<=', '>', '>=', '==', '!=',#'lt', 'le', 'gt', 'ge', 'eq', 'ne',

# not_ok# =~ !~

Page 31: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all /;

Page 32: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all /;

if( qr/^\d+$/ == all( @salaries ) ) { ...}

Page 33: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ all /;

if( qr/^\d+$/ == all( @salaries ) ) { ...}

if( all(@peon_salaries) <= @boss_salaries ){ ...}

Page 34: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ one any /;

my $meeting_time = any(2,4,6);

Page 35: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ one any /;

my $meeting_time = any(2,4,6);

Page 36: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ one any /;

my $meeting_time = any(2,4,6);

$VAR1 = bless( [ 2, 4, 6,], 'Perl6::Junction::Any' );

Page 37: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Junction qw/ one any /;

my $meeting_time = any(2,4,6);

$VAR1 = bless( [ 2, 4, 6,], 'Perl6::Junction::Any' );

if( $meeting_time == $current_time ){ # this is true at 2, 4, and 6 print ‘you have a meeting!’;}

Page 38: I, For One, Welcome Our New Perl6 Overlords

Perl6::Slurp

Page 39: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$complete_manure = slurp 'report';

$ignore = slurp '<suggestion_box';

Page 40: I, For One, Welcome Our New Perl6 Overlords
Page 41: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

Page 42: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

Page 43: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

$corporate_vision = slurp \$ceo_butt;

Page 44: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

$corporate_vision = slurp \$ceo_butt;

$corporate_vision = slurp 'ack ? myspace.log |';

Page 45: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

$corporate_vision = slurp \$ceo_butt;

$corporate_vision = slurp 'ack ? myspace.log |';

for( @random_books ) { $corporate_vision .= slurp;}

Page 46: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Slurp;

$corporate_vision = slurp \*STDIN;

$corporate_vision = slurp \$ceo_butt;

$corporate_vision = slurp 'ack ? myspace.log |';

for( @random_books ) { $corporate_vision .= slurp;}

$_ = undef;$corporate_vision = slurp;

Page 47: I, For One, Welcome Our New Perl6 Overlords

Perl6::Perldoc

Page 48: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Perldoc;

=comment during crunch time, utilise our skill set to make sure we retain the optimal position.

Page 49: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Perldoc;

=comment during crunch time, utilise our skill set to make sure we retain the optimal position.

=for DATA this is a Perl 6 style DATA section

print <DATA>;

=for DATA you can have more than one of them

Page 50: I, For One, Welcome Our New Perl6 Overlords
Page 51: I, For One, Welcome Our New Perl6 Overlords

Perl6::Subs

Page 52: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize( $asset ) { # use $asset here as normal}

commoditize( 'product1' );

Page 53: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets) { # use $assets here as normal} commoditize( ['desks', 'chairs'] );

Page 54: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

Page 55: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

Page 56: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

commoditize( ['health plan'] ); #shhhh

Page 57: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

commoditize( ['health plan'] ); #shhhh

sub commoditize (Array $assets, Str ?$name) { ...}

Page 58: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

commoditize( ['health plan'] ); #shhhh

Page 59: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

sub commoditize (Array $assets, Str $name) { ...}

commoditize( ['widgets', 'doohickeys'], 'operation enduring money');

commoditize( ['health plan'] ); #shhhh

sub commoditize (Array $assets, Str ?$name) { ...}

Page 60: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Subs;

{package Asset;

method divest (Sucker $buyer) { $self->sell( to => $buyer ); ... }

method commoditize ($class:) { print $class; }

}

Asset->commoditize();

Page 61: I, For One, Welcome Our New Perl6 Overlords

Perl6::Parameters

Page 62: I, For One, Welcome Our New Perl6 Overlords

Perl6::Say

Page 63: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Say;

say 'hi, bob!';

print "hi, bob.\n";

Page 64: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Say;

say 'hi, bob!';

print "hi, bob.\n";

say @hi;

Page 65: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Say;

say 'hi, bob!';

print "hi, bob.\n";

say @hi;say FH @hi;

Page 66: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Say;

say 'hi, bob!';

print "hi, bob.\n";

say @hi;say FH @hi;FH->say(@hi);

Page 67: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Say;

say 'hi, bob!';

print "hi, bob.\n";

say @hi;say FH @hi;FH->say(@hi);*FH->say(@hi);say $fh, @hi;$fh->say(@hi);

Page 68: I, For One, Welcome Our New Perl6 Overlords

Perl6::Placeholders

Page 69: I, For One, Welcome Our New Perl6 Overlords

growth

Page 70: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my $grow = { $^a + $^b };

Page 71: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my $grow = { $^a + $^b };

$grow->( 1, 2 );

Page 72: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my $grow = { $^a + $^b };

$grow->( 1, 2 );

$grow->( $business, $random_acquisition );

Page 73: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my $grow = { $^a + $^b };

$grow->( 1, 2 );

$grow->( $business, $random_acquisition );

# 3

# $bloat

Page 74: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my @reports_without_coversheet = grep { ! $report->has_coversheet } @reports;

Page 75: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Placeholders;

my @reports_without_coversheet = grep { ! $report->has_coversheet } @reports;

my %tps_reports = map { $^rpt->name() => $^rpt->is_tps() } @reports;

Page 76: I, For One, Welcome Our New Perl6 Overlords

Perl6::Binding

Page 77: I, For One, Welcome Our New Perl6 Overlords

for my $group_budget ( @budgets ){ $group_budget -= 10;}

Page 78: I, For One, Welcome Our New Perl6 Overlords

my %company = ( assets => { online => { static_services => [qw/ html_monkey data_entry /], tech => [qw/ programmer admins /], porn_sites => [ 'go _________ your __________' '___ me around the ________' 'what the parrot saw' ], }, sales => [qw/ groucho chico harpo zeppo gummo /], }, charities => { real => [], tax_shelters => [qw/ enron worldcom ceo-offspring_foundation /], },);

Page 79: I, For One, Welcome Our New Perl6 Overlords

my %company = ( assets => { online => { static_services => [qw/ html_monkey data_entry /], tech => [qw/ programmer admins /], porn_sites => [ 'go _________ your __________' '___ me around the ________' 'what the parrot saw' ], }, sales => [qw/ groucho chico harpo zeppo gummo /], }, charities => { real => [], tax_shelters => [qw/ enron worldcom ceo-offspring_foundation /], },);

Page 80: I, For One, Welcome Our New Perl6 Overlords

#$company->{ assets }->{ online }->{ static_services }

Page 81: I, For One, Welcome Our New Perl6 Overlords

#$company->{ assets }->{ online }->{ static_services }

my $static_services = $company->{ assets }->{ products }->{ online }->{ static_services }

Page 82: I, For One, Welcome Our New Perl6 Overlords

#$company->{ assets }->{ online }->{ static_services }

my $static_services = $company->{ assets }->{ products }->{ online }->{ static_services }

# manipulate $static_services here

$company->{ assets }->{ products }->{ online }->{ static_services } = $static_services;

Page 83: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Binding;

my $html_monkeys := $company->{ assets }->{ products }-> { online_solutions }->{ static_services };

# manipulate $static_services

Page 84: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Binding;

sub deny { my( $press_release, $conscience, @denials ) := *@_;

say "We cannot be held responsible for $_" for @denials; publish( $press_release );

$conscience->{ clean } = 1;}

# is our conscience is dirty?if( $conscience->{ clean } == 0 ) { deny( $press_release, $conscience, @denials );}

Page 85: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Binding;

sub deny { my( $press_release, $conscience, @denials ) := *@_;

say "We cannot be held responsible for $_" for @denials; publish( $press_release );

$conscience->{ clean } = 1;}

# is our conscience is dirty?if( $conscience->{ clean } == 0 ) { deny( $press_release, $conscience, @denials );}

# now our conscience is clean (ie, $conscience->{ clean } is 1)

Page 86: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Binding;

my @square_hole := %round_peg;my $one_meeting := @many_topics;

Page 87: I, For One, Welcome Our New Perl6 Overlords

Perl6::Classes

Page 88: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Classes;

class Employee { has $.boss;}

class Manager { has @.meetings;}

Page 89: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Classes;

class Employee { has $.boss;}

class Manager is Employee { has @.meetings;}

Page 90: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Classes;

class Employee { has $.boss;

method take_a_labs_day is protected { ... }}

class Manager is Employee { has @.meetings;

method get_response is private { .... }}

Page 91: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Classes;

class CorporateClient is Client {

has $.name; has @.accounts; has %.meetings_by_date;

sub threaten { print "I own a bunch of shares..."; }}

Page 92: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Classes;

class CorporateClient is Client {

method complain { if( $.shares > 1_000_000 ) { print "sir! yes sir!\n"; } else { print "buy more shares\n"; } }}

Page 93: I, For One, Welcome Our New Perl6 Overlords

Perl6::Attributesuse Perl6::Attributes;

sub print_client_information { my ($self) = @_; print $.name;

print @.purchases; print $.purchases[ 2 ]; print scalar @.purchases;

print keys %.complaints; print $.complaints{ RTFM };}

Page 94: I, For One, Welcome Our New Perl6 Overlords

Perl6::Caller

Page 95: I, For One, Welcome Our New Perl6 Overlords

# perl5

my ( $package, $filename, $line ) = caller;

Page 96: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $package = caller->package;my $filename = caller->filename;my $line_number = caller->line;

Page 97: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $package = caller->package;my $filename = caller->filename;my $line_number = caller->line;my $sub = caller->subroutine;

Page 98: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $package = caller->package;my $filename = caller->filename;my $line_number = caller->line;my $sub = caller->subroutine;my $is_require = caller->is_require;

Page 99: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $package = caller->package;my $filename = caller->filename;my $line_number = caller->line;my $sub = caller->subroutine;my $is_require = caller->is_require;my $hasargs = caller->hasargs;

Page 100: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $package = caller->package;my $filename = caller->filename;my $line_number = caller->line;my $sub = caller->subroutine;my $is_require = caller->is_require;my $hasargs = caller->hasargs;my $wantarray = caller->wantarray;

Page 101: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $caller = caller;

Page 102: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $caller = caller;

$caller->package;$caller->filename;$caller->line;$caller->subroutine;$caller->is_require;$caller->hasargs;$caller->wantarray;

Page 103: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $caller = caller;

$caller->package;$caller->filename;$caller->line;$caller->subroutine;$caller->is_require;$caller->hasargs;$caller->wantarray;

Page 104: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Caller;

my $caller = caller;

$caller->package;$caller->filename;$caller->line;$caller->subroutine;$caller->is_require;$caller->hasargs;$caller->wantarray;

Page 105: I, For One, Welcome Our New Perl6 Overlords

Perl6::Interpolators

Page 106: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Interpolator;

print “the client says $($client->whinge)”;

Page 107: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Interpolator;

print “the client says $($client->whinge)”;

print “the agenda today: @($agenda->items)”;

Page 108: I, For One, Welcome Our New Perl6 Overlords

use Perl6::Interpolator;

print “the client says $($client->whinge)”;

print “the agenda today: @($agenda->items)”;

print “the short version: $($agenda->items)”;

Page 109: I, For One, Welcome Our New Perl6 Overlords
Page 110: I, For One, Welcome Our New Perl6 Overlords

Perl6::Role

Page 111: I, For One, Welcome Our New Perl6 Overlords

Perl6::Role

Page 112: I, For One, Welcome Our New Perl6 Overlords

Perl6::Roles

Page 113: I, For One, Welcome Our New Perl6 Overlords

Perl6::Roles

Page 114: I, For One, Welcome Our New Perl6 Overlords

Perl6::Perl

Page 115: I, For One, Welcome Our New Perl6 Overlords

Perl6::Builtins

Page 116: I, For One, Welcome Our New Perl6 Overlords

Perl6::Gather

Page 117: I, For One, Welcome Our New Perl6 Overlords

Perl6::Rules

Page 118: I, For One, Welcome Our New Perl6 Overlords

Perl6::Rules

Page 119: I, For One, Welcome Our New Perl6 Overlords

Perl6::Form

Page 120: I, For One, Welcome Our New Perl6 Overlords

Perl6::ExportThe chief export of

is pain.

Page 121: I, For One, Welcome Our New Perl6 Overlords

Perl6::Contexts

Page 122: I, For One, Welcome Our New Perl6 Overlords

Perl6::Currying

Page 123: I, For One, Welcome Our New Perl6 Overlords
Page 124: I, For One, Welcome Our New Perl6 Overlords

Attribute::Handlers Attribute::Types Attribute::Overload Attribute::TieClasses Attribute::Util Attribute::Deprecated CLASS Class::Object Coro NEXT Scalar::Properties Switch Parrot::Embed Perl6::Attributes Perl6::Binding Perl6::Builtins Perl6::Caller Perl6::Classes Perl6::Contexts Perl6::Currying Perl6::Export

Perl6::Export::AttrsPerl6::FormPerl6::GatherPerl6::InterpolatorsPerl6::JunctionPerl6::ParametersPerl6::PerlPerl6::PerldocPerl6::PlaceholdersPerl6::PugsPerl6::RolesPerl6::RulesPerl6::SayPerl6::SlurpPerl6::SubsPerl6::TakePerl6::TokenerPerl6::VariablesRegexp::ParserUNIVERSAL::exportsWant

Page 125: I, For One, Welcome Our New Perl6 Overlords

For more infomation

Perl6::Bundle

Page 126: I, For One, Welcome Our New Perl6 Overlords

For more infomation

Page 127: I, For One, Welcome Our New Perl6 Overlords

Questions?

Page 128: I, For One, Welcome Our New Perl6 Overlords

Thanks!

• All of the Perl6::Bundle authors•(surprisingly not always Damian)•(also Luke Palmer)•Don Watson•OSDC•realestate.com.au•You