modern perl for the unfrozen paleolithic perl programmer

67
Modern Perl for the Unfrozen Paleolithic Perl Programmer John SJ Anderson Infinity Interactive @genehack Pittsburgh Perl Workshop 2015 11 Oct 2015

Upload: john-anderson

Post on 20-Feb-2017

2.747 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Modern Perl for the Unfrozen Paleolithic

Perl ProgrammerJohn SJ Anderson Infinity Interactive ⭐︎ ⭐ @︎genehack

Pittsburgh Perl Workshop 2015 11 Oct 2015 ⭐︎

Page 2: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

I'M JUST A CAVEMAN

YOUR MODERN PERL FRIGHTENS AND CONFUSES ME

Page 3: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Welcome to

2015!

Page 4: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Quite a few things have changed...

Page 5: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

...but many

haven't

Page 6: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

You're just in time for the Perl6 release

party

Page 7: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

We're still using Perl5!

Page 8: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

2001: Perl 5.6

Page 9: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

2015: Perl 5.22

Page 10: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Many language

improvements

Page 11: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Unicode support

!

Page 12: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

😀

Page 13: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

💩

Page 14: Modern Perl for the Unfrozen Paleolithic  Perl Programmer
Page 15: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

defined($this) ? $this : $that

defined-or

Page 16: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

$this // $that

defined-or

Page 17: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

subroutine

signatures

Page 18: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

sub add ($one, $two) { return $one + $two; }

Page 19: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

new tools

Page 20: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

"system" perl:

Page 21: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

"system" perl:

just say no

Page 22: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

/usr/bin/perl

Page 23: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

/usr/bin/perl

Page 24: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

perlbrew

Page 25: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

perlbrew.pl

Page 26: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

plenv

Page 27: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://github.com/tokuhirom/plenv

Page 28: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

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

Page 29: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

plenv > perlbrew• Less magic messing around with PATH

• Can "pin" Perl different ways: globally, per-shell, or per-directory

Page 30: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

perlbrew > plenv• Kickass website

Page 31: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of installing in your $HOME…

Page 32: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

local::lib

Page 33: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

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

Page 34: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of installing stuff…

Page 35: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

cpanminus

cpanm

Page 36: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

% cpan Git::WrapperCPAN: Storable loaded ok (v2.54)Reading '/Users/genehack/.cpan/Metadata' Database was generated on Sat, 10 Oct 2015 01:17:02 GMTRunning 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.gzCPAN: YAML loaded ok (v1.15)CPAN: Digest::SHA loaded ok (v5.95)Fetching with LWP:http://cpan.schatt.com/authors/id/G/GE/GENEHACK/CHECKSUMSCPAN: Compress::Zlib loaded ok (v2.068)Checksum for /Users/genehack/.cpan/sources/authors/id/G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz oktmp-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.PLLocating bin:git... found at /opt/git/bin/git.Checking if your kit is complete...Looks goodGenerating a Unix-style MakefileWriting Makefile for Git::WrapperWriting MYMETA.yml and MYMETA.json

Page 37: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

GENEHACK/Git-Wrapper-0.045.tar.gz [17/1516] /opt/plenv/versions/5.23.2/bin/perl5.23.2 Makefile.PL -- OKRunning make for G/GE/GENEHACK/Git-Wrapper-0.045.tar.gzcp lib/Git/Wrapper/File/RawModification.pm blib/lib/Git/Wrapper/File/RawModification.pmcp lib/Git/Wrapper.pm blib/lib/Git/Wrapper.pmcp lib/Git/Wrapper/Statuses.pm blib/lib/Git/Wrapper/Statuses.pmcp lib/Git/Wrapper/Exception.pm blib/lib/Git/Wrapper/Exception.pmcp lib/Git/Wrapper/Log.pm blib/lib/Git/Wrapper/Log.pmcp lib/Git/Wrapper/Status.pm blib/lib/Git/Wrapper/Status.pmManifying 6 pod documents GENEHACK/Git-Wrapper-0.045.tar.gz /usr/bin/make -- OKRunning make testPERL_DL_NONLAZY=1 "/opt/plenv/versions/5.23.2/bin/perl5.23.2" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.tt/00-load.t ............... 1/6 # Testing Git::Wrapper 0.045t/00-load.t ............... okt/author-err.t ............ skipped: these tests are for testing by the authort/basic.t ................. # Testing git version: 2.5.2t/basic.t ................. okt/git_binary.t ............ okt/parse_args.t ............ okt/path_class.t ............ # Testing git version: 2.5.2t/path_class.t ............ okt/release-pod-coverage.t .. skipped: these tests are for release candidate testingt/release-pod-syntax.t .... skipped: these tests are for release candidate testingAll 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

Page 38: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

(still not done but I got tired of pasting.)

Page 39: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

% cpanm Git::Wrapper--> Working on Git::WrapperFetching http://www.cpan.org/authors/id/G/GE/GENEHACK/Git-Wrapper-0.045.tar.gz ... OKConfiguring Git-Wrapper-0.045 ... OKBuilding and testing Git-Wrapper-0.045 ... OKSuccessfully installed Git-Wrapper-0.045

Page 40: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of stuff on CPAN…

Page 41: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://metacpan.org/

Page 42: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

search.cpan.org

Page 43: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://metacpan.org/

Page 44: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://metacpan.org/

Page 45: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://github.com/CPAN-API/metacpan-web

Page 46: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Duck Duck Go

Page 47: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Duck Duck Go

!cpanm

Page 48: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of modules...

Page 49: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

JSON::MaybeXS

Page 50: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

MooseMoo

Page 51: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

CGI.pmis

gone

Page 52: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

(not really)

Page 53: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

Plack

Page 54: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of Perl websites…

Page 55: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://cpanratings.perl.org/

Page 56: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://cpanratings.perl.org/

Page 57: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://metacpan.org/

Page 58: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://cpants.cpanauthors.org/

Page 59: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://cpants.cpanauthors.org/

Page 60: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

https://metacpan.org/

Page 61: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://prepan.org/

Page 62: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of staying up to date on Perl news…

Page 63: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://perlweekly.com/

Page 64: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

http://blogs.perl.org/users/sawyer_x/

Page 65: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

speaking of retrospectives

Page 66: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

thanks!

Page 67: Modern Perl for the Unfrozen Paleolithic  Perl Programmer

questions?