Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modern Perl for the Unfrozen Paleolithic Perl Programmer

Modern Perl for the Unfrozen Paleolithic Perl Programmer

If you last used Perl in the last century, you're probably frightened and confused about all the innovation that's happened in the Perl community when you weren't paying attention. If you come to this talk, you’ll learn the best practices around issues such as which version of Perl5 to use, Perl5 installation management, language features/libraries to use and avoid, modern tooling, and more!

John SJ Anderson

June 21, 2016

More Decks by John SJ Anderson

Other Decks in Programming


  1. Modern Perl for the Unfrozen Paleolithic Perl Programmer John SJ

    Anderson ⭐ Infinity Interactive ⭐ @genehack YAPC::NA ⭐ 21 June 2016 ⭐ Orlando FL
  2. Disclaimer I'mma talk pretty fast. Feel free to ask questions

    particularly if I'm moving too quickly

    ME I was inspired to give this talk by a few online friends who happen to be Perl programmers -- but they're not engaged with the community, they're just using Perl to get a job done, and there's a widening gulf between what I think is reasonable and what they're doing -- so I wanted to put together sort of an info dump
  4. Quite a few things have changed... Many things have changed

    since you fell into that glacier in 2001,
  5. 2001: Perl 5.6 When you slipped into that big hole

    in the ice, perl 5.6 was the latest and greatest
  6. Unicode support! You probably don't remember Unicode -- it was

    around in 2001, but not terribly important or very well understood. It's way too complicated to get into here, just know that now we can get _really_ expressive in our Perl code
  7. defined($this) ? $this : $that defined-or We got a great

    new feature in 5.10 called defined-or. You've probably written code much like this hundreds of times.
  8. $this // $that defined-or Now, we can just write this!

    Which is pretty awesome. Defined-or was my favorite new perl feature of the 2000s
  9. sub add ($one, $two) { return $one + $two; }

    so we don't even have to unpack @_ ourselves! Who has started using subroutine signatures?
  10. new tools It's not just language level features, we also

    have a host of new tools to make it easier to work with Perl
  11. "system" perl: just say no and encourage people not to

    use it for their development projects
  12. /usr/bin/perl is no more. Instead, we use tools to install

    new Perls, outside the control of the OS
  13. advantages • Solves "vendor Perl lockin" issues • Install multiple

    Perls in your home directory • ... or elsewhere • Trivially switch from Perl version to Perl version • Able to install modules without special permissions • Easy to stay up to date with Perl development either one of these tools will give you numerous advantages over using the system perl
  14. plenv > perlbrew • Less magic messing around with PATH

    • Can "pin" Perl different ways: globally, per-shell, or per-directory personally, i'm using plenv these days -- the ability to easily specify a Perl version for a particular project is particularly useful to me
  15. local::lib • Install your own copies of modules • In

    your $HOME (so no special permissions needed) • Can also install per-project modules • Integrates well with other tools
  16. % cpan Git::Wrapper CPAN: Storable loaded ok (v2.54) Reading '/Users/genehack/.cpan/Metadata'

    Database was generated on Sat, 10 Oct 2015 01:17:02 GMT Running install for module 'Git::Wrapper' CPAN: LWP::UserAgent loaded ok (v6.13) Fetching with LWP: http://cpan.schatt.com/authors/id/G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz CPAN: YAML loaded ok (v1.15) CPAN: Digest::SHA loaded ok (v5.95) Fetching with LWP: http://cpan.schatt.com/authors/id/G/GE/GENEHACK/CHECKSUMS CPAN: Compress::Zlib loaded ok (v2.068) Checksum for /Users/genehack/.cpan/sources/authors/id/G/GE/GENEHACK/Git- Wrapper-0.045.tar.gz ok tmp-47326 for tmp-47326: No such file or directory at /opt/plenv/versions/5.23.2/lib/ perl5/5.23.2/CPAN/Distribution .pm line 468. CPAN: File::Temp loaded ok (v0.2304) CPAN: CPAN::Meta::Requirements loaded ok (v2.133) CPAN: Parse::CPAN::Meta loaded ok (v1.4417) CPAN: CPAN::Meta loaded ok (v2.150005) CPAN: Module::CoreList loaded ok (v5.20150820) Configuring G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz with Makefile.PL Locating bin:git... found at /opt/git/bin/git. Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Git::Wrapper Writing MYMETA.yml and MYMETA.json this is the output from using the default 'cpan' client to install something.
  17. GENEHACK/Git-Wrapper-0.045.tar.gz [17/1516] /opt/plenv/versions/5.23.2/bin/perl5.23.2 Makefile.PL -- OK Running make for G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz

    cp lib/Git/Wrapper/File/RawModification.pm blib/lib/Git/Wrapper/File/RawModification.pm cp lib/Git/Wrapper.pm blib/lib/Git/Wrapper.pm cp lib/Git/Wrapper/Statuses.pm blib/lib/Git/Wrapper/Statuses.pm cp lib/Git/Wrapper/Exception.pm blib/lib/Git/Wrapper/Exception.pm cp lib/Git/Wrapper/Log.pm blib/lib/Git/Wrapper/Log.pm cp lib/Git/Wrapper/Status.pm blib/lib/Git/Wrapper/Status.pm Manifying 6 pod documents GENEHACK/Git-Wrapper-0.045.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 "/opt/plenv/versions/5.23.2/bin/perl5.23.2" "-MExtUtils::Command::MM" "- MTest::Harness" "-e" "und ef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/00-load.t ............... 1/6 # Testing Git::Wrapper 0.045 t/00-load.t ............... ok t/author-err.t ............ skipped: these tests are for testing by the author t/basic.t ................. # Testing git version: 2.5.2 t/basic.t ................. ok t/git_binary.t ............ ok t/parse_args.t ............ ok t/path_class.t ............ # Testing git version: 2.5.2 t/path_class.t ............ ok t/release-pod-coverage.t .. skipped: these tests are for release candidate testing t/release-pod-syntax.t .... skipped: these tests are for release candidate testing All tests successful. Files=8, Tests=67, 1 wallclock secs ( 0.04 usr 0.02 sys + 0.39 cusr 0.31 csys = 0.76 CPU) Result: PASS GENEHACK/Git-Wrapper-0.045.tar.gz and this is more of the output...
  18. % cpanm Git::Wrapper --> Working on Git::Wrapper Fetching http://www.cpan.org/authors/id/G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz ...

    OK Configuring Git-Wrapper-0.045 ... OK Building and testing Git-Wrapper-0.045 ... OK Successfully installed Git-Wrapper-0.045 this is the output from cpanm installing the same thing
  19. https://metacpan.org/ things like a syntax-highlighted source view, linking to home

    pages and code repos, showing test results, and the amount of activity in a project
  20. Duck Duck Go we also have a new search engine

    here in 2016. it's cool, and it's partially written in Perl
  21. Duck Duck Go !cpanm The most useful feature, though, is

    ability to use 'bang searches' to restrict your search to a particular site - this is how you search metacpan
  22. speaking of modules... if you haven't been playing close attention

    (and since you were frozen, you haven't been!) there are a few new modules you may have missed
  23. JSON::MaybeXS anybody doing web development these days needs to interact

    with JSON - using JSON::MaybeXS will make sure that you have a JSON library available, picking the best one from a number of alternatives
  24. Moose Moo To get a handle on how we do

    OOP in Perl these days, you should look into Moose -- and then when you're ready to write some code, you'll probably be able to get away with dropping down to Moo
  25. CGI.pm is gone I do have some bad news for

    you -- CGI.pm has been pulled out of core
  26. Plack But the current standard for web development in Perl

    is Plack/PSGI. Offers a number of advantages over CGI, and is the basis for all modern Perl web frameworks
  27. speaking of Perl websites… we have quite a few new

    websites these days, which make it easier to keep up with the current state of things
  28. http://cpanratings.perl.org/ one of the problems with cpan is there's just

    _so_ _much_ _stuff_ there. it can be hard to decide which one of a dozen different modules to use. cpanratings helps with this problem
  29. http://cpants.cpanauthors.org/ here's what that looks like for a particular module.

    super useful if you're not sure you're doing things the "right" way
  30. http://prepan.org/ We also have PrePAN, which is a place to

    get feedback on module ideas you haven't even written yet
  31. speaking of staying up to date on Perl news… we

    also have some sites that make it easier to keep up to date with what's going on in the perl world
  32. http://perlweekly.com/ there's perl weekly, which is a once a week

    email newsletter aggregating perl related news from all over the web
  33. http://blogs.perl.org/users/sawyer_x/ and in a recent development, sawyer has revived the

    p5p weekly email summary -- excellent if you want to keep up with what's going on with perl5 development but don't have time to follow the email list yourself