SlideShare uma empresa Scribd logo
1 de 75
Le PERL Est Mort
    Perl !r"gh # A$s
Ye Olde Perl
Ye Olde Perl

CGI.pm
Ye Olde Perl

CGI.pm

mod_perl
Ye Olde Perl

CGI.pm

mod_perl

Matt's Script Archive
Ye Olde Perl

CGI.pm

mod_perl

Matt's Script Archive

Bring Your Own Everything
Ye Olde Perl

CGI.pm

mod_perl

Matt's Script Archive

Bring Your Own Everything

Language warts
CGI.pm
CGI.pm
Built-in HTML
generation
CGI.pm
Built-in HTML
generation

No separation of
concerns
CGI.pm
Built-in HTML
generation

No separation of
concerns

Slow (weird
optimizations around
this)
mod_perl
mod_perl

     API for Apache
mod_perl

     API for Apache

     Good for changing the
     request/response cycle
mod_perl

     API for Apache

     Good for changing the
     request/response cycle

     Subpar for writing
     actual applications—
     too low level
Matt's Script Archive
Matt's Script Archive
Matt's Script Archive
Matt's Script Archive
Among the first popular places to find reusable
bits of code
Matt's Script Archive
Among the first popular places to find reusable
bits of code

Easy to deploy, fulfilled common tasks, so very
popular
Matt's Script Archive
Among the first popular places to find reusable
bits of code

Easy to deploy, fulfilled common tasks, so very
popular

Terribly buggy and insecure
Matt's Script Archive
Among the first popular places to find reusable
bits of code

Easy to deploy, fulfilled common tasks, so very
popular

Terribly buggy and insecure

But because of their popularity, they became
the example of Perl code to the outside world
BYOE
BYOE

Immature CPAN means few good choices for
common tasks
BYOE

Immature CPAN means few good choices for
common tasks

This means lots of DarkPAN reinvention of
common tasks
BYOE

Immature CPAN means few good choices for
common tasks

This means lots of DarkPAN reinvention of
common tasks

Additionally, this hastened adoption of Matt's
"code".
Language warts
Language warts


Switch
Language warts


Switch

Pseudohashes
Language warts


Switch

Pseudohashes

Formats
Less Icky 2000s Perl
Less Icky 2000s Perl

Some best practices
Less Icky 2000s Perl

Some best practices

CPAN starting to mature
Less Icky 2000s Perl

Some best practices

CPAN starting to mature

Still no PBP!
Less Icky 2000s Perl

Some best practices

CPAN starting to mature

Still no PBP!

Perl 6
Some Best Practices
Some Best Practices


strict and warnings
Some Best Practices


strict and warnings

Tests
Some Best Practices


strict and warnings

Tests

Toolchain
CPAN Starting to Mature
CPAN Starting to Mature


POE
CPAN Starting to Mature


POE

DateTime
CPAN Starting to Mature


POE

DateTime

Still too much TMTOWTDI in other areas
Still No PBP!
Still No PBP!

It's very controversial
Still No PBP!

It's very controversial

Many of its
suggestions suck
Still No PBP!

It's very controversial

Many of its
suggestions suck

But the important
thing is it started a
dialog.
Perl 6
Perl 6
Separate language to
Perl 5, but still Perl
Perl 6
Separate language to
Perl 5, but still Perl

Rejuvenated Perl 5
dev
Perl 6
Separate language to
Perl 5, but still Perl

Rejuvenated Perl 5
dev

Foreshadowing for
future of Perl 5 OOP
(dun dun dun!)
Modern Perl (2005-)
Modern Perl (2005-)
Many names, same general idea
Modern Perl (2005-)
Many names, same general idea

TMTOWTDIBSCINABTE
Modern Perl (2005-)
Many names, same general idea

TMTOWTDIBSCINABTE

Mature, disciplined use of CPAN, language
features
Modern Perl (2005-)
Many names, same general idea

TMTOWTDIBSCINABTE

Mature, disciplined use of CPAN, language
features

Typical app stack: Catalyst, Plack, Moose,
DBIx::Class
Catalyst: MVC for Perl
Catalyst: MVC for Perl

Pluggable, flexible
Catalyst: MVC for Perl

Pluggable, flexible

Great for large apps
Catalyst: MVC for Perl

Pluggable, flexible

Great for large apps

Flexibility handles
complexity
Plack/PSGI
Plack/PSGI

Plack/PSGI is awesome middleware for
connecting your app to your web server. Think
of WSGI from Python or Rack from Ruby.
Plack/PSGI

Plack/PSGI is awesome middleware for
connecting your app to your web server. Think
of WSGI from Python or Rack from Ruby.

Lots of useful tools, too, like debugging tools
and logging and session handling etc.
Moose
Moose
Mature, flexible,
powerful object system
for Perl 5
Moose
Mature, flexible,
powerful object system
for Perl 5

Large, mature
community
Moose
Mature, flexible,
powerful object system
for Perl 5

Large, mature
community

Based in solid research
Moose
Mature, flexible,
powerful object system
for Perl 5

Large, mature
community

Based in solid research

Evolved from Perl 6
development
DBIx::Class
DBIx::Class

ORM that respects
databases
DBIx::Class

ORM that respects
databases

Resultsets!
DBIx::Class

ORM that respects
databases

Resultsets!

Easy to customize row
classes with methods
Questions?
Colophon
Title image: http://www.flickr.com/photos/caribb/4310691752/in/photostream/

Cave writing: http://www.flickr.com/photos/the-consortium/3057208323/in/
photostream/

Old machinery: http://www.flickr.com/photos/mon_oeil/438670665/in/
photostream/

Fail meter: http://www.flickr.com/photos/16854395@N05/2420602334/in/
photostream/
Light switch complicator: http://www.flickr.com/photos/lenore-m/510420532/in/
photostream/

Stone tools: http://www.flickr.com/photos/salsaboy/3228329709/in/photostream/

Perl Best Practices (c) 2005 O'Reilly Media
Colophon II
Camelia TM Larry Wall: https://raw.github.com/
perl6/mu/master/misc/camelia.txt

Moose: http://www.flickr.com/photos/
russosborne/1684252182/

Catalyst logo used under license.

DBIx::Class logo (c) Mark Keating

Mais conteúdo relacionado

Mais procurados

Perl Myths 200909
Perl Myths 200909Perl Myths 200909
Perl Myths 200909Tim Bunce
 
Python Intro For Managers
Python Intro For ManagersPython Intro For Managers
Python Intro For ManagersAtul Shridhar
 
Coldfusion
ColdfusionColdfusion
ColdfusionRam
 
CakePHP - The Path to 2.0
CakePHP - The Path to 2.0CakePHP - The Path to 2.0
CakePHP - The Path to 2.0Graham Weldon
 
Re-imaginging CakePHP
Re-imaginging CakePHPRe-imaginging CakePHP
Re-imaginging CakePHPGraham Weldon
 
Wojciech Ogrodowczyk | 3Scale | I am a Developer
Wojciech Ogrodowczyk | 3Scale | I am a DeveloperWojciech Ogrodowczyk | 3Scale | I am a Developer
Wojciech Ogrodowczyk | 3Scale | I am a DeveloperSmash Tech
 
Rise of the Machines: PHP and IoT - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016Rise of the Machines: PHP and IoT - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016Colin O'Dell
 
Raspberry using Python Session 3
Raspberry using Python Session 3Raspberry using Python Session 3
Raspberry using Python Session 3Mohamed Abd Ela'al
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Conguest29922
 
Automating Your Workflow with Gulp.js - php[world] 2016
Automating Your Workflow with Gulp.js - php[world] 2016Automating Your Workflow with Gulp.js - php[world] 2016
Automating Your Workflow with Gulp.js - php[world] 2016Colin O'Dell
 
Can PL/SQL be Clean? (2013)
Can PL/SQL be Clean? (2013)Can PL/SQL be Clean? (2013)
Can PL/SQL be Clean? (2013)Peter Kofler
 
Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Tim Bunce
 
Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009eCommConf
 
Raspberry using Python Session 1
Raspberry using Python Session 1Raspberry using Python Session 1
Raspberry using Python Session 1Mohamed Abd Ela'al
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS languageKiwamu Okabe
 
C++11 Was Only the Beginning
C++11 Was Only the BeginningC++11 Was Only the Beginning
C++11 Was Only the BeginningMateusz Pusz
 
Merb Camp Keynote
Merb Camp KeynoteMerb Camp Keynote
Merb Camp KeynoteYehuda Katz
 
CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011Graham Weldon
 

Mais procurados (19)

Perl Myths 200909
Perl Myths 200909Perl Myths 200909
Perl Myths 200909
 
Python Intro For Managers
Python Intro For ManagersPython Intro For Managers
Python Intro For Managers
 
Coldfusion
ColdfusionColdfusion
Coldfusion
 
CakePHP - The Path to 2.0
CakePHP - The Path to 2.0CakePHP - The Path to 2.0
CakePHP - The Path to 2.0
 
Re-imaginging CakePHP
Re-imaginging CakePHPRe-imaginging CakePHP
Re-imaginging CakePHP
 
Wojciech Ogrodowczyk | 3Scale | I am a Developer
Wojciech Ogrodowczyk | 3Scale | I am a DeveloperWojciech Ogrodowczyk | 3Scale | I am a Developer
Wojciech Ogrodowczyk | 3Scale | I am a Developer
 
Rise of the Machines: PHP and IoT - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016Rise of the Machines: PHP and IoT - php[world] 2016
Rise of the Machines: PHP and IoT - php[world] 2016
 
Raspberry using Python Session 3
Raspberry using Python Session 3Raspberry using Python Session 3
Raspberry using Python Session 3
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Automating Your Workflow with Gulp.js - php[world] 2016
Automating Your Workflow with Gulp.js - php[world] 2016Automating Your Workflow with Gulp.js - php[world] 2016
Automating Your Workflow with Gulp.js - php[world] 2016
 
Can PL/SQL be Clean? (2013)
Can PL/SQL be Clean? (2013)Can PL/SQL be Clean? (2013)
Can PL/SQL be Clean? (2013)
 
Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)
 
Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009
 
Raspberry using Python Session 1
Raspberry using Python Session 1Raspberry using Python Session 1
Raspberry using Python Session 1
 
Ruby 2.1
Ruby 2.1Ruby 2.1
Ruby 2.1
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
C++11 Was Only the Beginning
C++11 Was Only the BeginningC++11 Was Only the Beginning
C++11 Was Only the Beginning
 
Merb Camp Keynote
Merb Camp KeynoteMerb Camp Keynote
Merb Camp Keynote
 
CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011
 

Semelhante a Le PERL est mort

Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Enterprise Perl
Enterprise PerlEnterprise Perl
Enterprise PerlDave Cross
 
Webinar: Learn Perl - The Jewel of Scripting Languages
Webinar: Learn Perl - The Jewel of Scripting LanguagesWebinar: Learn Perl - The Jewel of Scripting Languages
Webinar: Learn Perl - The Jewel of Scripting LanguagesEdureka!
 
Was können wir von Rebol lernen?
Was können wir von Rebol lernen?Was können wir von Rebol lernen?
Was können wir von Rebol lernen?lichtkind
 
DBI for Parrot and Perl 6 Lightning Talk 2007
DBI for Parrot and Perl 6 Lightning Talk 2007DBI for Parrot and Perl 6 Lightning Talk 2007
DBI for Parrot and Perl 6 Lightning Talk 2007Tim Bunce
 
Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"Nuno Carvalho
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlCosimo Streppone
 
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12ActiveState
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivationjistr
 
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14ActiveState
 
Mastering Regex in Perl
Mastering Regex in PerlMastering Regex in Perl
Mastering Regex in PerlEdureka!
 
Enlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitEnlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitSamsung Open Source Group
 

Semelhante a Le PERL est mort (20)

Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
groovy & grails - lecture 1
groovy & grails - lecture 1groovy & grails - lecture 1
groovy & grails - lecture 1
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
Python overview
Python overviewPython overview
Python overview
 
Enterprise Perl
Enterprise PerlEnterprise Perl
Enterprise Perl
 
Webinar: Learn Perl - The Jewel of Scripting Languages
Webinar: Learn Perl - The Jewel of Scripting LanguagesWebinar: Learn Perl - The Jewel of Scripting Languages
Webinar: Learn Perl - The Jewel of Scripting Languages
 
Was können wir von Rebol lernen?
Was können wir von Rebol lernen?Was können wir von Rebol lernen?
Was können wir von Rebol lernen?
 
Minimal reason to learn Perl
Minimal reason  to learn PerlMinimal reason  to learn Perl
Minimal reason to learn Perl
 
DBI for Parrot and Perl 6 Lightning Talk 2007
DBI for Parrot and Perl 6 Lightning Talk 2007DBI for Parrot and Perl 6 Lightning Talk 2007
DBI for Parrot and Perl 6 Lightning Talk 2007
 
Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"
 
Intro
IntroIntro
Intro
 
Intro
IntroIntro
Intro
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses Perl
 
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
 
Pearl
PearlPearl
Pearl
 
perl lauange
perl lauangeperl lauange
perl lauange
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
 
Mastering Regex in Perl
Mastering Regex in PerlMastering Regex in Perl
Mastering Regex in Perl
 
Enlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitEnlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & Toolkit
 

Último

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Último (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Le PERL est mort

Notas do Editor

  1. Perl's grown up a lot over the years. I'll be talking about how things were through a couple of stages in Perl's history, and then skip ahead to where we are now.\n\nTo be clear, I'll be talking about Perl as used in medium to large businesses. If you're just tinkering about, or your needs aren't that demanding, a lot of what I'll be talking about at the end of this talk will seem overkill. That's okay. There are other tools which fulfill less demanding needs. I'd be glad to point these out after the talk. \n
  2. This is the 1995 era, which you'll remember as the dot com bubble. There was a rush to get things done without much regard for keeping things going ten years down the line. As such there's a lot of ad hoc and ugly hacks. Thankfully things have moved on since this time.\n\nThere are many things about this era of Perl's history that I'm glad to see we've past. It's now easier than ever to install modules, and easier than ever to develop and maintain them. But I would be lying if I said that some of these things aren't haunting us still. \n
  3. Ah, CGI.pm. What a mess. It's slow, you mix your HTML and code and CSS and layout code and logic all together. Sigh. This is a bad thing because changes can affect unrelated parts of the code. And it's harder to give designers something they can use without being scared away by the business logic. \n\nAnd it's slow. CGI is most commonly implemented by forking a process for each request. Each and every request. perl startup is slow. So we have some weird optimizations happening here. This makes things harder to maintain (this is in the module itself).\n\nBut even with really fast quad-core boxes equipped with SSDs, the module still makes a mess of things. It has \n
  4. mod_perl is great for what it was meant to do—writing Apache modules in Perl. But what does this mean? If you want to access the request/response cycle directly, or write an authentication module for Apache in Perl, you'd use mod_perl. It's very fast, because the code is compiled once. So, used properly, this bit of software still has many uses. \n\nHowever, it's also very low-level, and this means that there's more coding needed to do common tasks than would be needed with higher level tools. \n
  5. Matt's Script Archive is, on its own, partly responsible for Perl having a reputation for being an unmaintainable mess of a language. It's a site containing a collection of Perl programs meant for usage on the Web. This would be okay on its own, but the programs are buggy in some spots and outright insecure in others. \n\nHowever, because they're freely available and fulfill common tasks, they became quite popular. And because they were (are?) popular, they served as examples from which many folks learned their Perl. As the code is rather terrible, this is rather undesirable. \n
  6. Matt's Script Archive is, on its own, partly responsible for Perl having a reputation for being an unmaintainable mess of a language. It's a site containing a collection of Perl programs meant for usage on the Web. This would be okay on its own, but the programs are buggy in some spots and outright insecure in others. \n\nHowever, because they're freely available and fulfill common tasks, they became quite popular. And because they were (are?) popular, they served as examples from which many folks learned their Perl. As the code is rather terrible, this is rather undesirable. \n
  7. Early in the history of Perl 5, we had CPAN. But it was the early days, before Moose and Catalyst and even Class::DBI. There were a few Getopt modules, a few basic modules for classes or objects, and ORMs were not really very common in any language. Two common modules that we did have at this time are DBI and POE, though they're generally the only exceptions. Even DateTime was only released in 2003 as an alpha. \n\nSo at this point we have a culture of reinvention, a culture that hasn't had the time to come into its own and fully realize or utilize the potential of CPAN. \n
  8. Sometimes language designers make mistakes. They're human. It happens. A few misfeatures which are thankfully going away or that have gone away are switch.pm and pseudohashes. I don't want to dwell on these since they're going away. The only thing you really need to know about these "features" is that you're better off without them. If you're really curious, you can look them up yourself. \n\nBeyond that, there are things like formats. They're still in the language, but are pretty much universally accepted as not the best way to do things these days. We have tools like tempting languages for the things we once used formats for. \n
  9. At this stage, things are starting to improve but Perl still hasn't really come into its own as a maintainable apps language. There's several important things happening here, some of which had unexpected results. \n
  10. Around the early 2000s we started to see experts in support communities guiding new folks to strict and warnings, language features that help the programmer write better code. This is important, as new folks need the guidance these features provide. \n\nIn addition, Perl's strong tradition for testing really started to take off around this time. It's still going strong, with the QA hackathon every year drawing some of Perl's brightest developers. \n\nIncidentally, the QA hackathon is also where a lot of work on the toolchain happens. By "toolchain" here I mean the tools for holding and installing Perl modules. As Perl became more popular, we needed more robust tools. And smart people stepped up to write them. Today their efforts are a large part of what makes Perl the mature apps language it is. \n
  11. Ah, CPAN. My favorite Perl feature. It's in the early 2000s that we start to see some awesome tools, tools that people still use today to do really common and basic things.\n\nChances are that if you did asynchronous programming in Perl at this time, you used POE. It's still going strong after more than 10 years of development (though these days it has a lot of competition). It does nearly everything, with modules for almost anything you can think of. \n\nConversely, it's maddeningly difficult to do date/time calculations correctly without DateTime. Another one of Perl's de facto standard modules, it's also one of the oldest and most mature. I and many other Perl hackers turn to it for all temporal work. \n \nHowever, we still had a long way to go at this point. CPAN was still young, so there were few de facto tools for various jobs. Competition is a good thing, indeed, but at the early stage CPAN was at it was more harm than good. \n
  12. Perl Best Practices is probably the singular example of a galvanizing book in the Perl community. Many developers love it, many hate it. The standards described in it are obligatory at many shops around the world, despite many developers wishing the book was never written. \n\nA lot of the suggestions it gives (particularly regarding CPAN modules) are outdated or just bogus. I wouldn't give it to a new developer and tell them to follow it to the letter. I don't know anyone who would. \n\nBut that's not the point. The point is the book got people really thinking about code standards in the Perl community, and inspired them to devise their own best practices, their own evolving set of standards. In a way, Perl Best Practices laid the groundwork for the modern Perl movement. So, despite being crazy in a lot of ways, PBP really helped the industry. \n
  13. To clear up some rumors: Perl 6 is not Perl 5. They are different languages in the same lineage, incompatible but complementary. Perl 6 is Larry's sixth Perl, no less Perl than the Perl 5 I've been talking about and will continue talking about for the remainder of this talk. \n\nSo what's it have to do with Perl 5, then? More than you would think. For one thing, it kickstarted and rejuvenated development on Perl 5. But what I'm going to focus on later is that through various circumstances, Perl 6's development directly led to a major revolution in Perl 5's support for OOP. This revolution is still going today, and it's televised on presentingperl.org. Consider it a bit of foreshadowing, if you're looking for a literary context in which to place this talk. \n
  14. There's a lot of names for the current movement happening in the Perl community: modern Perl, enlightened Perl, the Perl renaissance. They all basically refer to the same thing: a mature usage of CPAN combined with Perl's rich history of testing and documentation. All of these things bring Perl from "scripting language" to full apps language.\n\nOne of the mottoes of this era is TMTOWTDIBSCINABTE, or "Tim toady bicarbonate". It stands for "there's more than one way to do it, but sometimes consistency is not a bad thing either". It refers to all the choices available on CPAN, and the benefits in choosing the best tools to do a job.\n\nAs this movement is largely defined by the liberal application of CPAN libraries, it makes sense to cover a few important ones. A typical Web application stack uses Catalyst for MVC, Plack for app middleware (connects Catalyst to different Web servers, with some pluggable awesome in between), Moose as an object system, and DBIx::Class for the ORM. These aren't the only choices, but they're probably the most popular. If you want to hire a mature Perl dev, these are your best choices. They're what the community has standardized on. \n
  15. Catalyst grew out of older Perl Web frameworks. It's a framework that uses the MVC framework: model, view, controller. In this configuration, Catalyst represents the controller. A templating system like Template Toolkit or Mason is used for the view, and an ORM like DBIx::Class is used for the model. \n\nA major benefit of working with Catalyst is its flexibility. It's a very pluggable framework, partly due to its design and partly due to using Moose. All of this flexibility does make things mote complicated, though. So if you're wanting to write a small app with just a few pages, Catalyst isn't for you. \n
  16. PSGI is a protocol for connecting a Perl app and a Web server. It's server independent, and can work in many different configurations: CGI, mod_perl, FastCGI, etc.\n\nBut it's not just glue. The Plack namespace on CPAN has a growing collection of tools to make Web development in Perl easier and less horrible. Chances are if you're writing Web code with Perl these days and you're not using cGI.pm that you are using Plack in some way. \n
  17. Moose is Stevan Little's object system for Perl 5. Remember how I said that Perl 6 was instrumental in the development of Perl 5? This is what I was mostly referring to. Moose is one of the best things to happen in a long time for Perl, and the community has mostly adopted it as the de facto (bicarbonate) object system for Perl 5. \n\nWhat makes Moose so great? Usually I could not care less for computer science topics, as they very rarely translate into concepts directly applicable in a working programmer's life. However, Moose is very research-based, including the metamodel found in CLOS. This metamodel gives Moose much of its power, but it doesn't stop there. Moose also has awesome features like roles, or composable pieces of behavior. Roles are what most people really want when they (mis)use inheritance. But that's a subject for another talk. \n
  18. Much along the lines of Catalyst and Moose, DBIx::Class is an extremely flexible ORM, written and maintained by a team of developers who aren't afraid of SQL. It allows a developer to be completely abstracted from the database if they want, but at the same time grants the flexibility to give literal SQL queries that populate objects. \n\nBeyond this, it's capable of automatically reading the database schema, at runtime, and generating the necessary classes to allow you to get up and running as quickly as possible.\n\nIt has well-designed resultset support, only pulling data from the database when necessary. And when the built in methods don't do enough, it's trivial to add new methods to row objects, and these work just as well as the built in CRUD methods. \n
  19. \n\n
  20. \n\n
  21. \n\n