SlideShare a Scribd company logo
1 of 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.

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked

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
 

Viewers also liked (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
 

Similar to 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
 

Similar to 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
 

Recently uploaded

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
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
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
"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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
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)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
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
 
"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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 

The Essential Perl Hacker's Toolkit