SlideShare a Scribd company logo
1 of 38
Download to read offline
Introductory Perl
AKA LET'S WRITE SOME FUCKING PERL
by William Orr
What do I use Perl for?
• Scripting
• Applications
• Web programming
• Pretty much everything you could want
Why?
• Perl has a very, very large set of available
libraries through CPAN
• TIMTOWTDI
• Language is very flexible - many modules on
CPAN influence behavior of language
How to get Perl - Windows
• dwimperl.com
• Comes with Padre (a Perl "IDE") as well as
tons of useful Perl modules, and an old-ish
version Strawberry Perl
How to get Perl - OSX and Linux
You already have it.
Multiple Perl Installs (you want this)
# cpan
cpan> install App::perlbrew
$ perlbrew init
$ perlbrew install perl-5.16.2
$ perlbrew switch perl-5.16.2
Install other listed modules
How to make Perl more useful
Install some modules
• App::perlbrew
• App::cpanminus
• Const::Fast
• Try::Tiny
• Devel::REPL
Documentation - perldoc
$ perldoc -f <functionname>
$ perldoc <modulename>
$ man perl
Documentation - MetaCPAN
• All the perldoc documentation online and
searchable
• Includes 3rd party docs, links to the bug
tracker, automated testing platforms, authors
website, etc.
Let's write some fucking code
use strict;
use warnings;
use v5.10;
say "WUT UP WRRRRLD";
print "WUT UP WRRRRLDn";
Let's write some fucking code
Things to notice
• use strict
• use warnings
• use v5.10
• say
Let's use some fucking variables
my $first_variable = "This is a scalar";
my $second_variable = 5;
say $first_variable;
say("This is also a scalar: $second_variable");
my $third_variable = 4.5;
say "Guess what else is a fucking scalar?
$third_variable";
my $fourth_variable = qr| d{1,2} / d{1,2} / d{2,4} |x;
say "Also a scalar: $fourth_variable";
Let's use some fucking variables
Things to notice here
• Scalars!
• Interpolation
• Parentheses are optional
Interpolation
• Variables resolve to their value in strings
quoted with "", `` and most other quote-like
operators
I want a lot of scalars!
my @lets_talk_about_arrays = ( "an", "array", "is", "a",
"set", "of", "scalars", "only");
say "@lets_talk_about_arrays";
# We can index into them!
say $lets_talk_about_arrays[1];
# We can do ranges!
say @lets_talk_about_arrays[6..7];
# We can call functions on them!
say join " ", map { uc } @lets_talk_about_arrays[6..7];
say(join(" ", map({ uc } @lets_talk_about_arrays[6..7])));
I want a lot of scalars!
Things to notice here:
• Array declaration & initialization
• Ranges with ..
How do we get array length?
my $array_size = @lets_talk_about_arrays;
say $array_size;
Context
• Functions and operators impose context on
the variables you use
• Context determines result of expression
• Three kinds of context
o scalar
o list
o void
Context
# Scalar context
my $now = localtime;
say $now;
# List context
my @now = localtime;
say "(" . join(", ", @now) . ")";
Context
To review:
• Operators and functions impose context
• Values of expression depend on context
• Arrays used in scalar context return size
• Can force scalar context with scalar()
• Can force list context with ()=
• Documentation!
Dictionar-err, hashes!
my %hash = ( key => "value", other_key => 3, "new key",
5.2 );
say %hash;
say "$hash{key}";
say "$hash{other_key}";
say "$hash{new_key}";
# Scalar context?
say scalar %hash;
# WOAH
my %empty_hash;
say scalar %empty_hash;
Let's talk about operators
• They're all pretty much the same as you're
used to!
• Except for the new ones!
New operators
• . x
• <=>
• cmp, lt, gt, lte, gte, eq, ne
• //
• =~, !~
• or, and, not, xor
• ...
open my $fh, ">", "filename" or die $@;
Control flow - loops
my @some_array = 1..10;
foreach my $iter (@some_array) {
say $iter;
}
my $done = 0;
while (not $done) {
$done = int rand 2;
say $done;
}
Control flow - if
if ($some_var ne "done") {
} elsif ($other_var == 5) {
} else {
}
Control flow - switch
given ($foo) {
when (1) {
}
when (2) {
}
when ("45hundred") {
}
default {
}
}
Special operator - ~~
• Smart match operator
• Returns true based on various, sensible
conditions
• Full table in perlsyn - /Smart matching in
detail
FUCKIT LET'S WRITE SOME
FUNCTIONS
sub my_func {
my ($first, $second, $third) = @_;
return $first + $second + $third;
}
my_func 1, 2, 3
# Array is flattened - will return 6
my @arr = (1, 2, 3, 4, 5, 6);
# NEVER &my_func
SHIT HOW DO I NOT FLATTEN
ARRAYS IN FUNCTION CALLS?!
• or also "HOW THE HELL CAN I HAVE
COMPOSITE DATA STRUCTURES?!"
Let's talk about references
• Can pass around references to _anything_
o this includes functions
• A reference is a scalar - can pop arrays into
arrays
• When you modify the value of a reference, it
modifies the original variable
Let's talk about references
my @arr = ( 1 .. 10 );
# This won't compile
#my @two_d_arr = ( @arr, @arr );
my @two_d_arr = ( @arr, @arr );
# We'll see some reference addresses
say "@two_d_arr";
# One reference address
say $two_d_arr[0];
# Dereferencing
say "@{$two_d_arr[0]}";
Let's talk about references
# Hashes?
# YOU'RE DAMN RIGHT
my %hash;
$hash{first} = @arr;
say $hash{first}->[0];
# OR
say ${hash{first}}->[0];
# Lets get fancy
$hash{second} = %hash;
say $hash{second}->{first}->[0];
Let's talk about references
sub print_shit {
say "shit";
}
$hash{third} = &print_shit;
$hash{third}->();
Anonymous references
my $arr_ref = [ 1, 2, 3, 4 ];
say @$arr_ref;
say scalar @$arr_ref;
say $arr_ref->[1]
my $hash_ref = { key => 1, other_key => 5 };
say %$hash_ref;
say $hash_ref->{key};
my $sub_ref = sub { say "foo"; }
$sub_ref->();
Anonymous references
• anonymous array references declared with []
• anon hash refs declared with {}
• anon sub refs declared with sub { }
File I/O
open(my $fh, "<", "testfile") or die "Could not open file
for reading";
foreach my $line (<$fh>) {
print $line;
}
close($fh);
open($fh, ">>", "testfile") or die "Could not open file
for writing";
say $fh "let's append a message";
close($fh);
Let's run some commands
open(my $cmd, "-|", "ls") or die "Could not run ls";
foreach my $line (<$cmd>) {
print $line;
}
close($cmd);
open($cmd, "|-", "cat") or die "Could not run cat";
say $cmd "cat'd output";
close($cmd);
my $output = qx/ls/; # `` also works
foreach my $line (split /n/, $output) {
say $line;
}
In conclusion
This is some basic Perl, and is not even close
to conclusive

More Related Content

What's hot

Perl.Hacks.On.Vim
Perl.Hacks.On.VimPerl.Hacks.On.Vim
Perl.Hacks.On.VimLin Yo-An
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlordsheumann
 
Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Workhorse Computing
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationWorkhorse Computing
 
BASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationBASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationWorkhorse Computing
 
Learning Perl 6
Learning Perl 6 Learning Perl 6
Learning Perl 6 brian d foy
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl TechniquesDave Cross
 
The $path to knowledge: What little it take to unit-test Perl.
The $path to knowledge: What little it take to unit-test Perl.The $path to knowledge: What little it take to unit-test Perl.
The $path to knowledge: What little it take to unit-test Perl.Workhorse Computing
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Workhorse Computing
 
Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0Puppet
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a bossgsterndale
 

What's hot (20)

Perl.Hacks.On.Vim
Perl.Hacks.On.VimPerl.Hacks.On.Vim
Perl.Hacks.On.Vim
 
Perl basics for pentesters part 2
Perl basics for pentesters part 2Perl basics for pentesters part 2
Perl basics for pentesters part 2
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
 
Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command Interpolation
 
05php
05php05php
05php
 
rtwerewr
rtwerewrrtwerewr
rtwerewr
 
Metadata-driven Testing
Metadata-driven TestingMetadata-driven Testing
Metadata-driven Testing
 
Findbin libs
Findbin libsFindbin libs
Findbin libs
 
BASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationBASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic Interpolation
 
Learning Perl 6
Learning Perl 6 Learning Perl 6
Learning Perl 6
 
Memory Manglement in Raku
Memory Manglement in RakuMemory Manglement in Raku
Memory Manglement in Raku
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
The $path to knowledge: What little it take to unit-test Perl.
The $path to knowledge: What little it take to unit-test Perl.The $path to knowledge: What little it take to unit-test Perl.
The $path to knowledge: What little it take to unit-test Perl.
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6
 
Ruby 2.0
Ruby 2.0Ruby 2.0
Ruby 2.0
 
Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 

Viewers also liked

Introduction to perl_ a scripting language
Introduction to perl_ a scripting languageIntroduction to perl_ a scripting language
Introduction to perl_ a scripting languageVamshi Santhapuri
 
POD2::* and Perl translation documentation project
POD2::* and Perl translation documentation projectPOD2::* and Perl translation documentation project
POD2::* and Perl translation documentation projectEnrico Sorcinelli
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl ProgrammingUtkarsh Sengar
 
Perl programming language
Perl programming languagePerl programming language
Perl programming languageElie Obeid
 
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!Ricardo Signes
 

Viewers also liked (11)

Perl intro
Perl introPerl intro
Perl intro
 
Introduction to perl_ a scripting language
Introduction to perl_ a scripting languageIntroduction to perl_ a scripting language
Introduction to perl_ a scripting language
 
PerlIntro
PerlIntroPerlIntro
PerlIntro
 
POD2::* and Perl translation documentation project
POD2::* and Perl translation documentation projectPOD2::* and Perl translation documentation project
POD2::* and Perl translation documentation project
 
perl-java
perl-javaperl-java
perl-java
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl Programming
 
pickingUpPerl
pickingUpPerlpickingUpPerl
pickingUpPerl
 
Perl
PerlPerl
Perl
 
Perl programming language
Perl programming languagePerl programming language
Perl programming language
 
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
 
Perl Scripting
Perl ScriptingPerl Scripting
Perl Scripting
 

Similar to Introduction to Perl

php fundamental
php fundamentalphp fundamental
php fundamentalzalatarunk
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of phppooja bhandari
 
MIND sweeping introduction to PHP
MIND sweeping introduction to PHPMIND sweeping introduction to PHP
MIND sweeping introduction to PHPBUDNET
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1Dave Cross
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to PerlDave Cross
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 
Practical approach to perl day1
Practical approach to perl day1Practical approach to perl day1
Practical approach to perl day1Rakesh Mukundan
 
Scripting3
Scripting3Scripting3
Scripting3Nao Dara
 
You Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsYou Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsRoy Zimmer
 
PHP Basics and Demo HackU
PHP Basics and Demo HackUPHP Basics and Demo HackU
PHP Basics and Demo HackUAnshu Prateek
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning PerlDave Cross
 
Marc’s (bio)perl course
Marc’s (bio)perl courseMarc’s (bio)perl course
Marc’s (bio)perl courseMarc Logghe
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in OptimizationDavid Golden
 
LPW: Beginners Perl
LPW: Beginners PerlLPW: Beginners Perl
LPW: Beginners PerlDave Cross
 

Similar to Introduction to Perl (20)

php fundamental
php fundamentalphp fundamental
php fundamental
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of php
 
php
phpphp
php
 
MIND sweeping introduction to PHP
MIND sweeping introduction to PHPMIND sweeping introduction to PHP
MIND sweeping introduction to PHP
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Practical approach to perl day1
Practical approach to perl day1Practical approach to perl day1
Practical approach to perl day1
 
Scripting3
Scripting3Scripting3
Scripting3
 
Training on php by cyber security infotech (csi)
Training on  php by cyber security infotech (csi)Training on  php by cyber security infotech (csi)
Training on php by cyber security infotech (csi)
 
You Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsYou Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager Needs
 
PHP Basics and Demo HackU
PHP Basics and Demo HackUPHP Basics and Demo HackU
PHP Basics and Demo HackU
 
05php
05php05php
05php
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning Perl
 
Intro to Perl and Bioperl
Intro to Perl and BioperlIntro to Perl and Bioperl
Intro to Perl and Bioperl
 
Marc’s (bio)perl course
Marc’s (bio)perl courseMarc’s (bio)perl course
Marc’s (bio)perl course
 
05php
05php05php
05php
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in Optimization
 
Php classes in mumbai
Php classes in mumbaiPhp classes in mumbai
Php classes in mumbai
 
LPW: Beginners Perl
LPW: Beginners PerlLPW: Beginners Perl
LPW: Beginners Perl
 

Recently uploaded

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
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
 
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
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
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
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
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
 

Recently uploaded (20)

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
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
 
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)
 
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
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
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
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
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
 

Introduction to Perl

  • 1. Introductory Perl AKA LET'S WRITE SOME FUCKING PERL by William Orr
  • 2. What do I use Perl for? • Scripting • Applications • Web programming • Pretty much everything you could want
  • 3. Why? • Perl has a very, very large set of available libraries through CPAN • TIMTOWTDI • Language is very flexible - many modules on CPAN influence behavior of language
  • 4. How to get Perl - Windows • dwimperl.com • Comes with Padre (a Perl "IDE") as well as tons of useful Perl modules, and an old-ish version Strawberry Perl
  • 5. How to get Perl - OSX and Linux You already have it.
  • 6. Multiple Perl Installs (you want this) # cpan cpan> install App::perlbrew $ perlbrew init $ perlbrew install perl-5.16.2 $ perlbrew switch perl-5.16.2 Install other listed modules
  • 7. How to make Perl more useful Install some modules • App::perlbrew • App::cpanminus • Const::Fast • Try::Tiny • Devel::REPL
  • 8. Documentation - perldoc $ perldoc -f <functionname> $ perldoc <modulename> $ man perl
  • 9. Documentation - MetaCPAN • All the perldoc documentation online and searchable • Includes 3rd party docs, links to the bug tracker, automated testing platforms, authors website, etc.
  • 10. Let's write some fucking code use strict; use warnings; use v5.10; say "WUT UP WRRRRLD"; print "WUT UP WRRRRLDn";
  • 11. Let's write some fucking code Things to notice • use strict • use warnings • use v5.10 • say
  • 12. Let's use some fucking variables my $first_variable = "This is a scalar"; my $second_variable = 5; say $first_variable; say("This is also a scalar: $second_variable"); my $third_variable = 4.5; say "Guess what else is a fucking scalar? $third_variable"; my $fourth_variable = qr| d{1,2} / d{1,2} / d{2,4} |x; say "Also a scalar: $fourth_variable";
  • 13. Let's use some fucking variables Things to notice here • Scalars! • Interpolation • Parentheses are optional
  • 14. Interpolation • Variables resolve to their value in strings quoted with "", `` and most other quote-like operators
  • 15. I want a lot of scalars! my @lets_talk_about_arrays = ( "an", "array", "is", "a", "set", "of", "scalars", "only"); say "@lets_talk_about_arrays"; # We can index into them! say $lets_talk_about_arrays[1]; # We can do ranges! say @lets_talk_about_arrays[6..7]; # We can call functions on them! say join " ", map { uc } @lets_talk_about_arrays[6..7]; say(join(" ", map({ uc } @lets_talk_about_arrays[6..7])));
  • 16. I want a lot of scalars! Things to notice here: • Array declaration & initialization • Ranges with ..
  • 17. How do we get array length? my $array_size = @lets_talk_about_arrays; say $array_size;
  • 18. Context • Functions and operators impose context on the variables you use • Context determines result of expression • Three kinds of context o scalar o list o void
  • 19. Context # Scalar context my $now = localtime; say $now; # List context my @now = localtime; say "(" . join(", ", @now) . ")";
  • 20. Context To review: • Operators and functions impose context • Values of expression depend on context • Arrays used in scalar context return size • Can force scalar context with scalar() • Can force list context with ()= • Documentation!
  • 21. Dictionar-err, hashes! my %hash = ( key => "value", other_key => 3, "new key", 5.2 ); say %hash; say "$hash{key}"; say "$hash{other_key}"; say "$hash{new_key}"; # Scalar context? say scalar %hash; # WOAH my %empty_hash; say scalar %empty_hash;
  • 22. Let's talk about operators • They're all pretty much the same as you're used to! • Except for the new ones!
  • 23. New operators • . x • <=> • cmp, lt, gt, lte, gte, eq, ne • // • =~, !~ • or, and, not, xor • ... open my $fh, ">", "filename" or die $@;
  • 24. Control flow - loops my @some_array = 1..10; foreach my $iter (@some_array) { say $iter; } my $done = 0; while (not $done) { $done = int rand 2; say $done; }
  • 25. Control flow - if if ($some_var ne "done") { } elsif ($other_var == 5) { } else { }
  • 26. Control flow - switch given ($foo) { when (1) { } when (2) { } when ("45hundred") { } default { } }
  • 27. Special operator - ~~ • Smart match operator • Returns true based on various, sensible conditions • Full table in perlsyn - /Smart matching in detail
  • 28. FUCKIT LET'S WRITE SOME FUNCTIONS sub my_func { my ($first, $second, $third) = @_; return $first + $second + $third; } my_func 1, 2, 3 # Array is flattened - will return 6 my @arr = (1, 2, 3, 4, 5, 6); # NEVER &my_func
  • 29. SHIT HOW DO I NOT FLATTEN ARRAYS IN FUNCTION CALLS?! • or also "HOW THE HELL CAN I HAVE COMPOSITE DATA STRUCTURES?!"
  • 30. Let's talk about references • Can pass around references to _anything_ o this includes functions • A reference is a scalar - can pop arrays into arrays • When you modify the value of a reference, it modifies the original variable
  • 31. Let's talk about references my @arr = ( 1 .. 10 ); # This won't compile #my @two_d_arr = ( @arr, @arr ); my @two_d_arr = ( @arr, @arr ); # We'll see some reference addresses say "@two_d_arr"; # One reference address say $two_d_arr[0]; # Dereferencing say "@{$two_d_arr[0]}";
  • 32. Let's talk about references # Hashes? # YOU'RE DAMN RIGHT my %hash; $hash{first} = @arr; say $hash{first}->[0]; # OR say ${hash{first}}->[0]; # Lets get fancy $hash{second} = %hash; say $hash{second}->{first}->[0];
  • 33. Let's talk about references sub print_shit { say "shit"; } $hash{third} = &print_shit; $hash{third}->();
  • 34. Anonymous references my $arr_ref = [ 1, 2, 3, 4 ]; say @$arr_ref; say scalar @$arr_ref; say $arr_ref->[1] my $hash_ref = { key => 1, other_key => 5 }; say %$hash_ref; say $hash_ref->{key}; my $sub_ref = sub { say "foo"; } $sub_ref->();
  • 35. Anonymous references • anonymous array references declared with [] • anon hash refs declared with {} • anon sub refs declared with sub { }
  • 36. File I/O open(my $fh, "<", "testfile") or die "Could not open file for reading"; foreach my $line (<$fh>) { print $line; } close($fh); open($fh, ">>", "testfile") or die "Could not open file for writing"; say $fh "let's append a message"; close($fh);
  • 37. Let's run some commands open(my $cmd, "-|", "ls") or die "Could not run ls"; foreach my $line (<$cmd>) { print $line; } close($cmd); open($cmd, "|-", "cat") or die "Could not run cat"; say $cmd "cat'd output"; close($cmd); my $output = qx/ls/; # `` also works foreach my $line (split /n/, $output) { say $line; }
  • 38. In conclusion This is some basic Perl, and is not even close to conclusive