$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Charlotte Perl Mongers Kickoff
Search
Jason A. Crome
January 10, 2019
Programming
0
27
Charlotte Perl Mongers Kickoff
The restart of Charlotte Perl Mongers, with a graceful introduction to Modern Perl programming.
Jason A. Crome
January 10, 2019
Tweet
Share
More Decks by Jason A. Crome
See All by Jason A. Crome
Constructing Command Line Applications in Perl
cromedome
0
91
Accessibility in Web Sites
cromedome
0
23
Building a Honeypot
cromedome
0
53
Dependency Management with Carton
cromedome
0
39
Scraping Tumblr
cromedome
0
53
wEdge for Treasurers (and everyone else, too!)
cromedome
0
38
Integration Points for Property Tax, CAMA, & GIS
cromedome
0
270
Other Decks in Programming
See All in Programming
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
250
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
360
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
390
sbt 2
xuwei_k
0
300
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
210
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
440
認証・認可の基本を学ぼう後編
kouyuume
0
240
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
AIコーディングエージェント(Manus)
kondai24
0
190
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
How to Ace a Technical Interview
jacobian
281
24k
Optimizing for Happiness
mojombo
379
70k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Thoughts on Productivity
jonyablonski
73
5k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Become a Pro
speakerdeck
PRO
31
5.7k
Transcript
Welcome to Charlotte Perl Mongers! Jason A. Crome Senior Perl
Developer, Empowered January 10, 2019 Copyright (C) 2019, Jason A. Crome
Who are we?
What is Perl Mongers? • Grassroots organization for promoting Perl
• Run by volunteers (and zealots like me!) • Share and disseminate information about Perl and the community • Welcome to Charlotte.pm!
Engage with us! • Us = all of you! •
Use our Meetup • charlottedevs.slack.com#perl • irc.perl.org#charlotte.pm
What is Modern Perl?
What is Modern Perl? • First-class OO programming • Great
Testing Infrastructure • Deployment and Configuration Toolchain • Active user community • Modern language features • Modern frameworks
Who’s Using Modern Perl? • ZipRecruiter • Booking.com • Craigslist
• Ticketmaster • Amazon • BBC • NASA • Rent.com • DuckDuckGo • IMDB • Empowered • ShutterStock • ServerCentral • Pinboard
What is Modern Perl? • First-class OO programming • Great
Testing Infrastructure • Deployment and Configuration Toolchain • Active user community • Modern language features • Modern frameworks
Object Oriented • Moose • Moo • Mouse
package Point; sub new { my ($class, $x, $y) =
@_; my $self = { x => $x, y => $y, }; return bless $self, $class; } sub get_x { return $_[0]->{x}; } sub set_x { return $_[0]->{x} = $_[1]; } sub get_y { return $_[0]->{y}; } sub set_y { return $_[0]->{y} = $_[1]; } 1;
package Point; use Moose; has 'x' => (isa => 'Int',
is => 'rw', required => 1); has 'y' => (isa => 'Int', is => 'rw', required => 1); sub clear { my $self = shift; $self->x(0); $self->y(0); } package Point3D; use Moose; extends 'Point'; has 'z' => (isa => 'Int', is => 'rw', required => 1); after 'clear' => sub { my $self = shift; $self->z(0); };
# hash or hashrefs are ok for the constructor my
$point1 = Point->new(x => 5, y => 7); my $point2 = Point->new({x => 5, y => 7}); my $point3d = Point3D->new(x => 5, y => 42, z => -5); Using the Point Class
Roles with Moose package MyApp::CLI::SetPassword; use strictures 2; use MooseX::App::Command;
extends qw( MyApp::CLI ); with qw( MyApp::Role::CLI::WithPassword MyApp::Role::CLI::WithUsername MyApp::Role::CLI::WithUser ); use MyApp::Module; sub run ( $self ) { $self->_say( "Changing password for " . $self->username . '...' ); $self->user->password( $self->password ); $self->user->update; say "Done!"; } 1;
Testing Infrastructure • Test2 • Test::Class::Moose • prove • TAP
Deployment/Configuration • Plack/PSGI • cpanfile • Carton • Pinto •
perlbrew • plenv
Community • Perl’s greatest strength • Perl Mongers • YAPC
/ TPC • (Meta)CPAN
MetaCPAN
Modern Language Features/Tools • Named parameters/sub signatures • Meta-object protocol
• XS • Pod • Perlcritic • Perltidy
Named params/sub signatures sub clear( $self ) { $self->x(0); $self->y(0);
} after 'clear' => sub( $self ) { $self->z(0); }; sub set( $self, $x, $y, $z?) { $self->x( $x ); $self->y( $y ); $self->z( $z ) if $z; }
Modern Frameworks • Object Frameworks • ORMs • Templating Frameworks
• Web App Frameworks
ORMs • Class::DBI • DBIx::Class • Rose::DB
DBIx::Class $user = $schema->resultset('User')->find( { email => $self->email } );
$user = $schema->resultset('User')->create( { username => $self->username, password => $self->password, email => $self->email, } ); my $user_rs = $schema->resultset('User')->search({ email => { like => '%example.com' }, },{ order_by => { username => 'ASC' }, } );
Templating Frameworks • HTML::Template • Mason • Template Toolkit •
Mustache • XSlate • And many, many others…
Web App Frameworks
And now, live coding and swag!
Questions?
Thanks! https://empowered.net jcrome@empoweredbenefits.com Twitter: @cromedome