Share
Embed
Modern Perl for the Unfrozen Paleolithic Perl Programmer
"Modern Perl for the Unfrozen Paleolithic Perl Programmer" as delivered at the DC-Baltimore Perl Workshop, 16 April 2016
John SJ Anderson
April 16, 2016
Transcript
68 slides
-
Modern Perl for the Unfrozen Paleolithic Perl Programmer John SJ
Anderson ⭐ Infinity Interactive ⭐ @genehack DC-Balmer Perl Workshop ⭐ 16 Apr 2016 -
Disclaimer I'mma talk pretty fast. Feel free to ask questions
particularly if I'm moving too quickly -
I'M JUST A CAVEMAN YOUR MODERN PERL FRIGHTENS AND CONFUSES
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 -
Quite a few things have changed... Many things have changed
since you fell into that glacier in 2001, -
There's a Clinton running for President! Perl6 is still just
about going to be released! -
We're still using Perl5! Most of us are still happily
coding in Perl5, however -
2001: Perl 5.6 When you slipped into that big hole
in the ice, perl 5.6 was the latest and greatest -
2016: Perl 5.22 4 But we're all the way up
to 5.22 now -
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 -
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. -
$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 -
sub add ($one, $two) { return $one + $two; }
so we don't even have to unpack @_ ourselves! Who has started using subroutine signatures? -
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 -
"system" perl: These days, we make a distinction between the
Perl that comes with your OS -
"system" perl: just say no and encourage people not to
use it for their development projects -
/usr/bin/perl is no more. Instead, we use tools to install
new Perls, outside the control of the OS -
perlbrew The first tool that was developed for this purpose
is called Perlbrew -
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 -
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 -
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 -
% 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. -
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... -
% 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 -
https://metacpan.org/ but metacpan integrates and visualizes a bunch of information
in a really useful way -
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 -
https://github.com/CPAN-API/metacpan-web it's also open source, so if you can think
of a way to make it better, you can -
Duck Duck Go we also have a new search engine
here in 2016. it's cool, and it's partially written in Perl -
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 -
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 -
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 -
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 -
CGI.pm is gone I do have some bad news for
you -- CGI.pm has been pulled out of core -
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 -
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 -
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 -
https://metacpan.org/ MetaCPAN links to reviews as well as showing an
average review score -
http://cpants.cpanauthors.org/ we also have CPANTS - automated testing of some
best practices around module development -
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 -
http://prepan.org/ We also have PrePAN, which is a place to
get feedback on module ideas you haven't even written yet -
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 -
http://perlweekly.com/ there's perl weekly, which is a once a week
email newsletter aggregating perl related news from all over the web -
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