From: Charles McGarvey Date: Fri, 8 Jun 2018 06:12:51 +0000 (-0600) Subject: add more examples of new perl5 features X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=0218bcdfa64147930d60d2140446285cd55247ad;p=chaz%2Ftalk-level-up-your-perl add more examples of new perl5 features --- diff --git a/css/slides.css b/css/slides.css index 6ba8dc1..076d14a 100644 --- a/css/slides.css +++ b/css/slides.css @@ -101,6 +101,9 @@ .ex-newfeatures .perl { font-size: 22px; } +.ex-newfeatures2 .perl { + font-size: 32px; +} .ex-moo .perl { font-size: 29px; } diff --git a/slides.html b/slides.html index 004c261..4ebcc71 100644 --- a/slides.html +++ b/slides.html @@ -1412,57 +1412,66 @@ sub launch_missile ( $silo_id = get_default_silo_id() ) { --- class: ex-newfeatures -## Try some newer perl5 features. +### Postfix dereferencing ```perl -*use v5.24; -*use feature qw(signatures); # available in v5.20 -*no warnings qw(experimental::signatures); - -my $missile_inventory = { - ID => 20, - WY => 25, - CA => 195, -}; +use v5.24; -*sub get_default_silo_id () { - return $_ if 0 < $missile_inventory->{$_} for (sort keys $missile_inventory->%*); - die "No more missiles. :-(\n"; +my $person = { + name => 'Bob', + associates => [ + { + name => 'Karen', + }, + { + name => 'Doug', + }, + ], } -*sub launch_missile ( $silo_id = get_default_silo_id() ) { - die "Silo is empty.\n" if $missile_inventory->{$silo_id} <= 0; - $missile_inventory->{$silo_id} -= 1; - say "Missile launched from silo $silo_id."; -} +my @others = $person->{associates}->@*; +my %associate_attributes = $person->{associates}->@[0]->%*; ``` +### `@{...}` can be `->@*` at the end +### `%{...}` can be `->%*` at the end + --- -class: ex-newfeatures +class: ex-newfeatures2 -## Try some newer perl5 features. +### Subroutine signatures ```perl -use v5.24; -use feature qw(signatures); # available in v5.20 +use v5.20; +use feature qw(signatures); no warnings qw(experimental::signatures); -my $missile_inventory = { - ID => 20, - WY => 25, - CA => 195, -}; +sub only_one_arg($foo) { +} -sub get_default_silo_id () { -* return $_ if 0 < $missile_inventory->{$_} for (sort keys $missile_inventory->%*); - die "No more missiles. :-(\n"; +sub other_args_allowed_and_ignored($foo, @) { } -sub launch_missile ( $silo_id = get_default_silo_id() ) { - die "Silo is empty.\n" if $missile_inventory->{$silo_id} <= 0; - $missile_inventory->{$silo_id} -= 1; - say "Missile launched from silo $silo_id."; +sub positional_and_named($args, %other) { } + +# etc. +``` + +--- +class: ex-newfeatures2 + +### Strip leading space in heredocs + +```perl +use v5.26; + +do { + print <<~'HERE'; + Hi. The text here is indented in the source code, + but not in the console! + HERE; +}; ``` ---