SlideShare une entreprise Scribd logo
1  sur  229
The Essential Perl
 Hacker's Toolkit

     Stephen R. Scaffidi
    stephen@scaffidi.net
       YAPC::NA 2012
Thanks for coming!
Contents
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
This is a talk about the essentials
essential to...
getting my job done
getting my job done better
getting my job done faster
so I can go out and drink beer
so I can go out and drink beer
 spend time posting on reddit
so I can go out and drink beer
 spend time posting on reddit
       watching youtube
so I can go out and drink beer
 spend time posting on reddit
       watching youtube
DANCING WITH THE STARS
the editor of the previous three slides has
                been sacked
I <3 Task::Kensho
This talk != Task::Kensho
But it is essential
So look it up:
Task::Kensho
my @essentials
Modules and tools I depend on
make my job easier
make my code better
easier to write
easier to read
easier to maintain
fewer bugs
because...
this is the code I don't write
I'm not that good.
Neither are you*
Neither are you*




*with several exceptions, half of them probably
leaving this room right now...
Previous iterations of this talk...
touchy-feely
waxed poetic about community
gushed about the CPAN
but...
there's simply no time
too many modules
too many modules
  (on the dance floor)
I prefer Perl because of this
           variety
No language is perfect
but...
Perl has the CPAN
And the CPAN gives us many,
 many ways to improve Perl
mst once said...
Perl is my VM
CPAN is my language
so...
let's learn about some of the best
parts of this language we call the
               CPAN
Allow me some hubris...
for the next 40 minutes or so.
Bring out the modules!
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
strict

warnings
really?
experience tells me the answer is
               yes.
English
Get English versions of Perl's
     “punctuation vars”
use English qw( -no_match_vars );
Examples

$#@^ English
$    $OUTPUT_RECORD_SEPARATOR
$$    $PID
$^O   $OSNAME
$+    $LAST_PAREN_MATCH
$!    $OS_ERROR
$?    $CHILD_ERROR
perldoc perlvar
autodie
Does what it says on the tin...
# overrides various built-ins...
use autodie;

# Now, they all succeed or die!
open my $foo, '>', 'file.txt';
chdir 'foo/bar';
pipe my($baz), my($buh);
readline $foo;
print “Do you ever check for print
 errors???”;
autodie is indispensable.
Why write an “or die” clause after
  every open() when you no
      longer have to???
Data::Dumper
Better than print().
Data::Dump::Streamer
Better than Data::Dumper!
List::Util
List::Util
List::MoreUtils
List::Util
List::MoreUtils
  Scalar::Util
For those go to Steve Lembark's
 talk on Util modules tomorrow
             morning.
parent
Stop messing with @ISA
# sets up @ISA for you
use parent qw(Some::Base Other::Base);
Clear and declarative!
Try::Tiny
Stop messing with eval {} for
    exception handling.
use Try::Tiny;

try {
    something_that_might_die();
}
catch {
    handle_error($_); # note: not $@
}
finally {
    clean_up();
};
IO::All
Maybe not essential
But damn handy!
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
Not just modules
App::cpanminus
A light-weight cpan client that
    understands local::lib
App::Ack
ack is better than grep
Devel::NYTProf
Hands-down, the best profiler for
             Perl
Devel::Cover
Tells you how well your tests
       cover your code
Speaking of tests...
prove
use it to run your tests
Lots of things under Test::
Test::More
   and/or
Test::Most
Many, many others...
Perl::Critic
Make sure your code confirms to
   certain quality standards.
You do use coding standards,
          right??
Moose
         and/or
Mouse / Moo / Any::Moose
Stop writing your own OO layers
Stop doing it inconsistently
Stop messing up inheritance,
  destructors, accessors and all
those little things that you have to
   write over and over and over
                again...
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
File::Spec
my $path = join '/', qw(foo bar baz)
What if it runs on Windows?
           Or VMS?
    Or early MacOS?
          AcornOS?
             QNX?
use File::Spec;

my $correct_path =
   File::Spec->catdir qw(foo bar
 baz);
use File::Spec::Functions qw(catdir);

my $path = catdir qw(foo bar baz);
Declarative and correct
Lots of other functions, too:



   ● canonpath   ● splitpath
   ● catfile     ● splitdir

   ● rootdir     ● catpath

   ● updir       ● abs2rel

   ● devnull     ● rel2abs

   ● tmpdir      ● file_name_is_absolute

   ● curdir      ● case_tolerant
Path::Class
use Path::Class qw(dir file);

# create dir and file objects...
my $dir = dir('foo', 'bar');
my $file = file('bob', 'file.txt');

# Stringifies with proper separator on
# each supported platform
print "dir: $dirn";
print "file: $filen";

# methods do what you expect...
my $subdir = $dir->subdir('baz');
my $parent = $subdir->parent;
my $dir2    = $file->dir;
File::Find
Traversing directories in a
   filesystem is tricky.
  You're not that good.
File::Find::Rules
If you don't like File::Find,
File::Find::Rules has some very
      nice functionality. Try it.
File::Touch
For when you need to touch a
file. Simple, and works cross-
           platform.
File::Basename
same as the system's basename
   and dirname commands.
File::Slurp
Simple thing... but which is more
           readable?
my $text =
  do { local(@ARGV, $/) = "file.txt"; <> };

                       or

my $text = read_file 'file.txt';
File::ReadBackwards
When you need it... you DON'T
   want to do it yourself!
File::Temp
Let this module handle temp files
and directories for you and stop
          doing it wrong.
File::HomeDir
Don't try to find a user's home
   directory on your own.
File::Which
Why are you shelling out to
         which?
        STOP IT!
File::Copy
Don't shell out to the system.
 Don't write your own copy
           routine.

 Please, PLEASE, just use
       File::Copy.
File::LibMagic
    and/or
File::MimeInfo
If you need to recognize a
      common file type...

STOP DOING IT YOURSELF!!!
If one doesn't work for you, try
          the other.
File::Path
recursively create and remove
          directories
File::stat
Can you remember this?
my ($dev, $ino, $mode, $nlink, $uid,
  $gid, $rdev, $size, $atime, $mtime,
  $ctime, $blksize, $blocks) =
    stat $file;
Maybe this?
my $dev     =   (stat   $file)[0];
my $ino     =   (stat   $file)[1];
my $mode    =   (stat   $file)[2];
my $nlink   =   (stat   $file)[3];
my $uid     =   (stat   $file)[4];
my $gid     =   (stat   $file)[5];
my $rdev    =   (stat   $file)[6];
my $size    =   (stat   $file)[7];
# etc...
Try this, instead...
use File::stat;

my $s = stat $file;
$s->dev;
$s->ino;
$s->size;

         Much nicer, no?
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
Tie::IxHash
         or
Tie::StoredOrderHash
Building your own sucks
Try this:
use Tie::StoredOrderHash qw(ordered);

my $hash = ordered [
  one => 1, two => 2, three => 3
];

while (my($k, $v) = each %$hash) {
  print "$k: $v ";
} # one: 1 two: 2 three: 3
Hash::Merge::Simple
Recursively merge hash
      structures
use Hash::Merge::Simple qw(merge);

my $a = {
  a => 1, c => 3,
  d => { i => 2 }, r => {}
};

my $b = {
  b => 2, a => 100,
  d => { l => 4 }
};

my $c = merge $a, $b;

# $c is now {
#   a => 100, b => 2, c => 3,
#   d => { i => 2, l => 4 }, r => {} }
Simple, declarative and
        correct.
Params::Util
use Params::Util qw(_SCALAR _HASH _INSTANCE);

sub foo {
  my $object = _INSTANCE(shift, 'Foo') or die;
  my $image = _SCALAR(shift)           or die;
  my $opts   = _HASHLIKE(shift) || {};
}
Sure, it's ugly...
But focused on correctly doing
   something common and
      (surprisingly) tricky
Params::Validate
The de-facto standard in
  parameter validation.
Algorithm::Combinatorics
Don't do combinatorics on your
own. Your code will be wrong. It
   will be slow. It will suck.
Set::CrossProduct
            or
Set::CartesianProduct::Lazy
Just here for shameless self-
         promotion.
Data::Compare
Recursively and correctly
compare data structures.
Test::Deep::NoTest
More functionality than
  Data::Compare.
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
DateTime
The most correct handling of
dates and times in Perl. Use it.
DateTime::Format::Strptime
           and/or
DateTime::Format::DateManip
Use these to transform various
time formats from strings into
      DateTime objects
Time::Piece
Make localtime() and gmtime()
return objects...
use Time::Piece;

my $t = localtime;
print "Time is $tn";
print "Year is ", $t->year, "n";
Time::Local
Gives you inverse functions for
    localtime() and gmtime()
use Time::Local qw(timelocal timegm);

my $localtime = timelocal(
  $sec, $min, $hour, $mday, $mon, $year);

my $gmtime = timegm(
  $sec, $min, $hour, $mday, $mon, $year);
DateTime::Tiny
   (and friends)
If DateTime is too “heavy” for
        you, at least use
DateTime::Tiny, or Date::Tiny
         or Time::Tiny
Time::ParseDate
Parsing dates and times is a
     PITA. Use a module...
use Time::ParseDate qw(parsedate);

$epoch_time =
  parsedate("12/11/94 2pm", %options)
Date::Extract
When you need to extract dates
and times from arbitrary blocks of
             text...
But it tries hard to avoid false-
             positives
Date::Extract::Surprise
For when you're willing to be
surprised at the dates found!
Simply works harder to find dates
 and times in text, at the cost of
    possibly false-positives.
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
YAML::Any
use YAML::Any qw(Dump Load);

$YAML::Indent = 3;

my $yaml = Dump(@objects);

my @objects = Load($yaml);
JSON
use JSON qw(to_json from_json);

my $json = to_json($perl_scalar);

my $perl_scalar = from_json($json);
Text::CSV
use Text::CSV;

my $csv = Text::CSV->new({ binary => 1 });
open my $fh, "<:encoding(utf8)", "test.csv";
while ( my $row = $csv->getline( $fh ) ) {
  $row->[2] =~ m/pattern/ or next;
  push @rows, $row;
}
URI
 URI::Split
URI::Escape
Spreadsheet::Read
Parse and read in a bunch of
different spreadsheet formats,
        including Excel.
XML::Simple
For simply reading in and parsing
 some XML into a data structure.

  For non-simple stuff, look at
        Task::Kensho!
Check Task::Kensho for more
      XML essentials.
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
Module::Runtime
safely and properly load
  modules at run-time
IO::Interactive
Do you know how to properly
test for an interactive terminal?
          DOUBTFUL
IPC::Run
The grand-daddy of running
 external commands and
     controlling the IO
Capture::Tiny
Capture stdout and stderr of any
             code
It Just Plain Works(tm)
Net::Server
    or
Net::Daemon
Writing daemons properly is hard
String::ShellQuote
(my $unsafe_string =
   q{string you're passing to system})
      =~ s/([/;()])/$1/g
Unsafe, incorrect, and ugly.
use String::ShellQuote qw(shell_quote);

my $safe_string = shell_quote
   q{something you might pass to
 system};
Much safer and more correct
IPC::System::Simple
Make using system() and output
capturing (a-la backticks) safer
use IPC::System::Simple
   qw(system systemx);

# overrides system() built-in...

# Succeed or die, avoid shell if @args
system("some_command",@args);

 # NEVER invokes the shell
systemx("some_command",@args);
use IPC::System::Simple
   qw(capture capturex);

# Use capture() instead of backticks:
 (also works in list context)

# Succeeds or dies,
# avoids shell if @args
my $output =
   capture("some_command",@args);

 # NEVER invokes the shell
My $output =
   capturex("some_command",@args);
Introduction
The Little Things
Slightly Bigger Things
Handling Files and Filesystems
Wrangling Data Structures and Types
Dealing with Dates and Times
Reading and Writing File Formats
Potpourri
Conclusion
Don't take my word for it
Explore the CPAN for yourself
Create your own toolkit
Be consistent
be thoughtful
Share what you learn
Contribute and help this
   language grow!
Thanks again.
I'm hercynium on IRC and
         twitter.

Contenu connexe

Tendances

Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0Puppet
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Workhorse Computing
 
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4NETWAYS
 
COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?Lloyd Huang
 
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner) Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner) Puppet
 
Puppet camp chicago-automated_testing2
Puppet camp chicago-automated_testing2Puppet camp chicago-automated_testing2
Puppet camp chicago-automated_testing2nottings
 
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Puppet
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate WorksGoro Fuji
 
Streams, sockets and filters oh my!
Streams, sockets and filters oh my!Streams, sockets and filters oh my!
Streams, sockets and filters oh my!Elizabeth Smith
 
SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09Elizabeth Smith
 
Spl to the Rescue - Zendcon 09
Spl to the Rescue - Zendcon 09Spl to the Rescue - Zendcon 09
Spl to the Rescue - Zendcon 09Elizabeth Smith
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know Aboutjoshua.mcadams
 
Writing and using php streams and sockets tek11
Writing and using php streams and sockets   tek11Writing and using php streams and sockets   tek11
Writing and using php streams and sockets tek11Elizabeth Smith
 
Php on the desktop and php gtk2
Php on the desktop and php gtk2Php on the desktop and php gtk2
Php on the desktop and php gtk2Elizabeth Smith
 
Perl 5.10
Perl 5.10Perl 5.10
Perl 5.10acme
 

Tendances (19)

Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6
 
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
 
COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?
 
Modern Perl
Modern PerlModern Perl
Modern Perl
 
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner) Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
 
Puppet camp chicago-automated_testing2
Puppet camp chicago-automated_testing2Puppet camp chicago-automated_testing2
Puppet camp chicago-automated_testing2
 
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
 
Spl in the wild
Spl in the wildSpl in the wild
Spl in the wild
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate Works
 
Streams, sockets and filters oh my!
Streams, sockets and filters oh my!Streams, sockets and filters oh my!
Streams, sockets and filters oh my!
 
SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09
 
Spl to the Rescue - Zendcon 09
Spl to the Rescue - Zendcon 09Spl to the Rescue - Zendcon 09
Spl to the Rescue - Zendcon 09
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
 
Writing and using php streams and sockets tek11
Writing and using php streams and sockets   tek11Writing and using php streams and sockets   tek11
Writing and using php streams and sockets tek11
 
Bioinformatics p5-bioperlv2014
Bioinformatics p5-bioperlv2014Bioinformatics p5-bioperlv2014
Bioinformatics p5-bioperlv2014
 
Php on the desktop and php gtk2
Php on the desktop and php gtk2Php on the desktop and php gtk2
Php on the desktop and php gtk2
 
Power of Puppet 4
Power of Puppet 4Power of Puppet 4
Power of Puppet 4
 
Perl 5.10
Perl 5.10Perl 5.10
Perl 5.10
 

En vedette

Indonesia After 2014 by Greg Barton
Indonesia After 2014 by Greg BartonIndonesia After 2014 by Greg Barton
Indonesia After 2014 by Greg Bartonppibelanda
 
World Trade Center Quad
World Trade Center QuadWorld Trade Center Quad
World Trade Center Quad360 Realtors
 
Relacion de la economia con otras ciencias
Relacion de la economia con otras cienciasRelacion de la economia con otras ciencias
Relacion de la economia con otras cienciasCristo Antonio
 
Que agua estas tomando?
Que agua estas tomando?Que agua estas tomando?
Que agua estas tomando?Sara Marchena
 
Portfolio pvc
Portfolio pvcPortfolio pvc
Portfolio pvctrufachan
 
Blogging, tweeting, sharing your work to reach policy makers
Blogging, tweeting, sharing your work to reach policy makersBlogging, tweeting, sharing your work to reach policy makers
Blogging, tweeting, sharing your work to reach policy makersTrish Groves
 
SharePoint meetup Speaking Deck - Knowing the formula
SharePoint meetup Speaking Deck -  Knowing the formulaSharePoint meetup Speaking Deck -  Knowing the formula
SharePoint meetup Speaking Deck - Knowing the formulaKenneth Cooper
 
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...Esperluette & Associés
 
مجلة إشراقات، العدد 57
مجلة إشراقات، العدد 57مجلة إشراقات، العدد 57
مجلة إشراقات، العدد 57إشراقات
 
Befargo ru
Befargo ruBefargo ru
Befargo ruWexcoin
 

En vedette (16)

Indonesia After 2014 by Greg Barton
Indonesia After 2014 by Greg BartonIndonesia After 2014 by Greg Barton
Indonesia After 2014 by Greg Barton
 
World Trade Center Quad
World Trade Center QuadWorld Trade Center Quad
World Trade Center Quad
 
Relacion de la economia con otras ciencias
Relacion de la economia con otras cienciasRelacion de la economia con otras ciencias
Relacion de la economia con otras ciencias
 
Amur river
Amur riverAmur river
Amur river
 
Que agua estas tomando?
Que agua estas tomando?Que agua estas tomando?
Que agua estas tomando?
 
Portfolio pvc
Portfolio pvcPortfolio pvc
Portfolio pvc
 
Ponencia Seguridad de Datos
Ponencia Seguridad de DatosPonencia Seguridad de Datos
Ponencia Seguridad de Datos
 
Blogging, tweeting, sharing your work to reach policy makers
Blogging, tweeting, sharing your work to reach policy makersBlogging, tweeting, sharing your work to reach policy makers
Blogging, tweeting, sharing your work to reach policy makers
 
Austin Journal of Clinical Immunology
Austin Journal of Clinical ImmunologyAustin Journal of Clinical Immunology
Austin Journal of Clinical Immunology
 
SharePoint meetup Speaking Deck - Knowing the formula
SharePoint meetup Speaking Deck -  Knowing the formulaSharePoint meetup Speaking Deck -  Knowing the formula
SharePoint meetup Speaking Deck - Knowing the formula
 
College to Confidence
College to ConfidenceCollege to Confidence
College to Confidence
 
Javascript part1
Javascript part1Javascript part1
Javascript part1
 
Fpl gtr-117 secagem
Fpl gtr-117 secagemFpl gtr-117 secagem
Fpl gtr-117 secagem
 
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...
Cardinal Édifice remporte le chantier de l’Institut Mines-Télécom du Campus P...
 
مجلة إشراقات، العدد 57
مجلة إشراقات، العدد 57مجلة إشراقات، العدد 57
مجلة إشراقات، العدد 57
 
Befargo ru
Befargo ruBefargo ru
Befargo ru
 

Similaire à The Essential Perl Hacker's Toolkit

What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?lichtkind
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeProf. Wim Van Criekinge
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl TechniquesDave Cross
 
Hiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceHiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceJesse Vincent
 
Introduction to writing readable and maintainable Perl
Introduction to writing readable and maintainable PerlIntroduction to writing readable and maintainable Perl
Introduction to writing readable and maintainable PerlAlex Balhatchet
 
Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Roy Zimmer
 
Linux Shell Scripting Craftsmanship
Linux Shell Scripting CraftsmanshipLinux Shell Scripting Craftsmanship
Linux Shell Scripting Craftsmanshipbokonen
 
Bioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionBioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionProf. Wim Van Criekinge
 
Get-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for EvilGet-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for Eviljaredhaight
 
CoffeeScript Design Patterns
CoffeeScript Design PatternsCoffeeScript Design Patterns
CoffeeScript Design PatternsTrevorBurnham
 
Architecture | Busy Java Developers Guide to NoSQL | Ted Neward
Architecture | Busy Java Developers Guide to NoSQL | Ted NewardArchitecture | Busy Java Developers Guide to NoSQL | Ted Neward
Architecture | Busy Java Developers Guide to NoSQL | Ted NewardJAX London
 
PSGI and Plack from first principles
PSGI and Plack from first principlesPSGI and Plack from first principles
PSGI and Plack from first principlesPerl Careers
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my timeEdorian
 

Similaire à The Essential Perl Hacker's Toolkit (20)

Perl Moderno
Perl ModernoPerl Moderno
Perl Moderno
 
What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?
 
Bioinformatica p6-bioperl
Bioinformatica p6-bioperlBioinformatica p6-bioperl
Bioinformatica p6-bioperl
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekinge
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
 
Low-Maintenance Perl
Low-Maintenance PerlLow-Maintenance Perl
Low-Maintenance Perl
 
Hiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceHiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret Sauce
 
Introduction to writing readable and maintainable Perl
Introduction to writing readable and maintainable PerlIntroduction to writing readable and maintainable Perl
Introduction to writing readable and maintainable Perl
 
PerlScripting
PerlScriptingPerlScripting
PerlScripting
 
Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)Plunging Into Perl While Avoiding the Deep End (mostly)
Plunging Into Perl While Avoiding the Deep End (mostly)
 
Linux Shell Scripting Craftsmanship
Linux Shell Scripting CraftsmanshipLinux Shell Scripting Craftsmanship
Linux Shell Scripting Craftsmanship
 
Getting testy with Perl
Getting testy with PerlGetting testy with Perl
Getting testy with Perl
 
Bioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionBioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introduction
 
Get-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for EvilGet-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for Evil
 
CoffeeScript Design Patterns
CoffeeScript Design PatternsCoffeeScript Design Patterns
CoffeeScript Design Patterns
 
API Design
API DesignAPI Design
API Design
 
Architecture | Busy Java Developers Guide to NoSQL | Ted Neward
Architecture | Busy Java Developers Guide to NoSQL | Ted NewardArchitecture | Busy Java Developers Guide to NoSQL | Ted Neward
Architecture | Busy Java Developers Guide to NoSQL | Ted Neward
 
PSGI and Plack from first principles
PSGI and Plack from first principlesPSGI and Plack from first principles
PSGI and Plack from first principles
 
Bioinformatica 10-11-2011-p6-bioperl
Bioinformatica 10-11-2011-p6-bioperlBioinformatica 10-11-2011-p6-bioperl
Bioinformatica 10-11-2011-p6-bioperl
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
 

Dernier

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 

Dernier (20)

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

The Essential Perl Hacker's Toolkit