SlideShare a Scribd company logo
1 of 69
Download to read offline
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 1
Perl Optimization Tidbits
Daina Pettit
Bluehost/EIG
dpettit@bluehost.com
daina@xmission.com
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 2
Perl Optimization Tidbits
Daina Pettit
Bluehost/EIG
dpettit@bluehost.com
daina@xmission.com
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 3
Purpose
● Look at performance differences of equivalent code
● What is faster and/or smaller
● Does it make a difference?
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 4
Other Considerations
● Readability
● Maintainability
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 5
Focus
1. Language constructs
2. Algorithmic Tweaks (if time)
Such as slurp vs. record-based processing
$x++;
vs.
++$x;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 6
Assumptions
Choices matter, right?
Can it make a difference?
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 7
Assumptions
Choices matter, right?
Can it make a difference?
Testing tools will give us good enough answers.
Results will be comparative, not absolute.
Performance comparison numbers are a bit squishy.
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 8
Performance Environment
● CentOS Linux 6.7
● 16G RAM
● 64-bit quad core i5-3210M Intel CPU @ 2.50GHz
● Perl version 5.22.2 (April 2016)
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 9
Performance Environment
● CentOS Linux 6.7
● 16G RAM
● 64-bit quad core i5-3210M Intel CPU @ 2.50GHz
● Perl version 5.22.2 (April 2016)
YMMV depending on perl version, OS, hardware, and configuration.
Performance measured by NYTProf and time
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 10
Methodology
Write lines of code as simple as possible.
Execute code hundreds of thousands or millions of times.
Analyze results with NYTProf
Look for problems in results.
Adjust.
Repeat.
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 11
Example
Is pre-increment faster than post-increment?
foreach (1..1_000_000) {
    $x++;
    ++$y;
}
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 12
Example
NYTProf results html view
Analyze, adjust, repeat, draw conclusions
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 13
Case 1: Auto Increment/Decrement
Pre/post increment/decrement integers and strings
$x++
++$x
$x­­
­­$x
$str++
++$str
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 14
Case 1: Auto Increment/Decrement—Results
Pre/post increment/decrement integers and strings
Alphabetic post-increment is twice as slow as numeric!
$x++
++$x – Numeric pre­increment faster by 3.7%
$x­­
­­$x – Numeric pre­decrement faster by 2.2%
$str++ – Alphabetic post­increment twice as 
fast as pre­increment
++$str 
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 15
Case 2: /xms or not
RE switches: /xms, recommended in PBP
m/.../xms
m/.../
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 16
Case 2: /xms or not—Results
$x++
++$x – Numeric pre­increment faster by 3.7%
$x­­
­­$x – Numeric pre­decrement faster by 2.2%
$str++ – Alphabetic post­increment twice as 
fast as pre­increment
++$str 
m/.../xms – 3% slower and more confusing
m/.../
Do not recommend.
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 17
Case 3: for vs. foreach
for and foreach are supposed to be synonyms.
foreach ( @x ) { }
for     ( @x ) { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 18
Case 3: for vs. foreach—Results
for and foreach are supposed to be synonyms.
     Very close, but foreach may be slightly faster.
foreach ( @x ) { }
for     ( @x ) { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 19
Case 4: for vs. foreach Part 2
for and foreach with my looping variable.
foreach my $y ( @x ) { }
for     my $y ( @x ) { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 20
Case 4: for vs. foreach Part 2—Results
for and foreach with my looping variable.
     With my, speed is near identical­­foreach less than 1% faster.
foreach my $y ( @x ) { }
for     my $y ( @x ) { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 21
Case 5: for vs. foreach vs. map
     
foreach ( @x ) { }
for ( @x ) { }
map { } @x;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 22
Case 5: for vs. foreach vs. map—Results
     map is 30% slower.  Why?
foreach ( @x ) { }
for ( @x ) { }
map { } @x;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 23
Why is map slower?
● map is best for creating new lists, so it builds a new list.
● foreach/for are best for transforming a list.
@words = map { split } @lines;
foreach ( @lines ) {
$_ = uc;
}
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 24
Case 6: not vs. !
not $x
 !  $x
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 25
Case 6: not vs. !—Results
     No significant difference.
not $x
 !  $x
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 26
Case 7: and vs. &&
       
 $x and $y
 $x &&  $y
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 27
Case 7: and vs. &&—Results
       && is 20% slower than and!
 $x and $y
 $x &&  $y
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 28
Case 8: or vs. ||
       
 $x or $y
 $x || $y
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 29
Case 8: or vs. ||—Results
       or is 30% faster than ||!
 $x or $y
 $x || $y
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 30
Case 8: or vs. ||—More Results
       or is 30% faster than ||!
       or is about twice as fast as and!
 $x or $y
 $x || $y
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 31
Case 9: String Interpolation
       
 $x = $y;
 $x = "$y";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 32
Case 9: String Interpolation—Results
       With double quoted string is 10% faster!
 $x = $y;
 $x = "$y";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 33
Case 10: Single vs. Double Quotes
       
 $x = 'abc';
 $x = "abc";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 34
Case 10: Single vs. Double Quotes—Results
       Double quoted string is almost always significantly faster!
 $x = 'abc';
 $x = "abc";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 35
Case 11: Variable Interpolation
       
 $x = "abc$y";
 $x = "abc${y}";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 36
Case 11: Variable Interpolation—Results
       Using {} is faster by about 10%.
 $x = "abc$y";
 $x = "abc${y}";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 37
Case 12: Order of Concatenation
       
 $x = "abc" . $y;
 $x = $y . "abc";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 38
Case 12: Order of Concatenation—Results
       String on left is almost always significantly faster.
 $x = "abc" . $y;
 $x = $y . "abc";
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 39
Case 13: Scope
Creating scope with code block.
       
 { $x = 5; }
 $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 40
Case 13: Scope—Results
Creating scope with code block.
       Scope costs 300%.
 { $x = 5; }
 $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 41
Case 14: Scope with my
Creating scope with code block and my.
       
 { my $x = 5; }
 my $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 42
Case 14: Scope with my—Results
Creating scope with code block and my.
       Scope limiting version of my costs 200%.
 { my $x = 5; }
 my $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 43
Case 15: Scope with local
Creating scope with code block and local.
       
 { local $x = 5; }
 local $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 44
Case 15: Scope with local—Results
Creating scope with code block and local.
       Scope limiting version of local costs about 20%.
       local costs about 20% more than my.
 { local $x = 5; }
 local $y = 3;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 45
Case 16: More Scope with my
Creating scope, masking existing variable with my.
       
my $x = 2;
{ my $x = 5; }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 46
Case 16: More Scope with my—Results
Creating scope, masking existing variable with my.
       Masking a variable with my is about 15% slower.
my $x = 2;
{ my $x = 5; }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 47
Case 17: Subroutine Arguments
Getting arguments in various ways.
       
my $x = shift;
my $x = $_[0];
my ( $x ) = @_;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 48
Case 17: Subroutine Arguments—Results
Getting arguments in various ways.
       
my $x = shift;  Second Place (15% slower)
my $x = $_[0];  Fastest
my ( $x ) = @_; Slowest (50% slower)
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 49
Case 18: Control Structure
Standard if statement equivalents
       
if ( $x ) { }
$x && do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 50
Case 18: Control Structure—Results
Standard if statement equivalents
       Identical performance
if ( $x ) { }
$x && do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 51
Case 18: Control Structure—Results
Standard if statement equivalents
       Identical performance
       Why would you use one over the other?
if ( $x ) { }
$x && do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 52
Case 19: Control Structure Part 2
Standard if else statement equivalents
       
if ( $x ) { } else { }
$x && do { } || do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 53
Case 19: Control Structure Part 2—Results
Standard if else statement equivalents
       do form is 40% faster
      
if ( $x ) { } else { }
$x && do { } || do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 54
Case 19: Control Structure Part 2—Results
Standard if else statement equivalents
       do form is 40% faster
       Why would you use one over the other?
if ( $x ) { } else { }
$x && do { } || do { }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 55
Case 20: return
return or not?
       
sub x { return $_[0]; }
sub x { $_[0]; }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 56
Case 20: return—Results
return or not?
       return is about 10% slower.
sub x { return $_[0]; }
sub x { $_[0]; }
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 57
Case 21: Print a list
       
print $x, $y;
print $x;
print $y;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 58
Case 21: Print a list—Results
       print a list is about 20% faster than done separately.
print $x, $y;
print $x;
print $y;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 59
Case 22: Print With or Without join
Which print is faster?
       
print join '­', @x;
$, = '­';
print @x;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 60
Case 22: Print With or Without join—Results
Which print is faster?
       join form is slightly faster, but not consistently faster.
print join '­', @x;
$, = '­';
print @x;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 61
Case 23: Array vs. Hash Speed
Which is faster?
$x[$y]
$x{$y}
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 62
Case 23: Array vs. Hash Speed—Results
Which is faster?
      Hash access is about 50% slower than array access.
$x[$y]
$x{$y}
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 63
Slurping to Optimize Input
Easy in Perl
Minimize disc cache
No difference if record count is small
Probably not a good idea if your file is bigger than your RAM
@x = <>;
undef $/;
$x = <>;
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 64
Weaknesses in Testing
1.  NYTProf tends to over­allocate time to the last statement in 
a block
2.  Almost certainly there are other unknown quirks in NYTProf
3.  Invisible internal perl optimizations
4.  Statement order matters
5.  Performance absolutes are hard to quantify.  Comparisons 
are best.
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 65
Summary
Most of this doesn't really matter!
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 66
Conclusion
1.  Features like variable scoping cost!
2.  Focus on the human cost—maintenance and readability
3.  In almost all cases nothing else matters.
4.  Biggest optimization gains are almost always due to 
algorithmic changes, not stylistic choices.
5.  However, if you really do need to optimize, now you can 
make informed choices!
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 67
Further Information
● perldoc Devel::NYTProf
● perldoc Benchmark
● For optimization of sorting and powerful functions map and grep 
see May 2014 OpenWest presentation – Streamlining and 
simplifying your Perl code using Map, Grep, and Sort on 
YouTube.
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 68
Q&A
Comments?
Questions?
Copyright 2017 Daina Pettit
Perl Optimization Tidbits – slide 69
Acknowledgments
Many thanks to
● Larry Wall
● Bluehost/EIG
● Tim Bunce

More Related Content

Similar to Perl optimization tidbits

Amazon SageMaker Algorithms: Machine Learning Week San Francisco
Amazon SageMaker Algorithms: Machine Learning Week San FranciscoAmazon SageMaker Algorithms: Machine Learning Week San Francisco
Amazon SageMaker Algorithms: Machine Learning Week San FranciscoAmazon Web Services
 
Debugging and Performance tricks for MXNet Gluon
Debugging and Performance tricks for MXNet GluonDebugging and Performance tricks for MXNet Gluon
Debugging and Performance tricks for MXNet GluonApache MXNet
 
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Frederic Descamps
 
PyPy - is it ready for production
PyPy - is it ready for productionPyPy - is it ready for production
PyPy - is it ready for productionMark Rees
 
Avoiding Over Design and Under Design
Avoiding Over Design and Under DesignAvoiding Over Design and Under Design
Avoiding Over Design and Under DesignTechWell
 
Buzz words-dunning-real-time-learning
Buzz words-dunning-real-time-learningBuzz words-dunning-real-time-learning
Buzz words-dunning-real-time-learningTed Dunning
 
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetJEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetNeil Stevenson
 

Similar to Perl optimization tidbits (7)

Amazon SageMaker Algorithms: Machine Learning Week San Francisco
Amazon SageMaker Algorithms: Machine Learning Week San FranciscoAmazon SageMaker Algorithms: Machine Learning Week San Francisco
Amazon SageMaker Algorithms: Machine Learning Week San Francisco
 
Debugging and Performance tricks for MXNet Gluon
Debugging and Performance tricks for MXNet GluonDebugging and Performance tricks for MXNet Gluon
Debugging and Performance tricks for MXNet Gluon
 
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
 
PyPy - is it ready for production
PyPy - is it ready for productionPyPy - is it ready for production
PyPy - is it ready for production
 
Avoiding Over Design and Under Design
Avoiding Over Design and Under DesignAvoiding Over Design and Under Design
Avoiding Over Design and Under Design
 
Buzz words-dunning-real-time-learning
Buzz words-dunning-real-time-learningBuzz words-dunning-real-time-learning
Buzz words-dunning-real-time-learning
 
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetJEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
 

Recently uploaded

Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 

Recently uploaded (20)

Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 

Perl optimization tidbits