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

I, For One, Welcome Our New Perl6 Overlords

Nov 18, 2014

Download

Business

heumann

An introduction to (some of) the many Perl6 modules on CPAN today, and what you can do with them.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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