Does what it says on the tin. An introduction to Modern Perl programming aimed at programmers who have little or no experience in Perl.
I gave this course at the London Perl Workshop in November 2013.
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
Hello, unfrozen Paleolithic Perl programmers! Welcome to 2016!
First, let’s start with the good news: yes, we’re still programming in Perl5 in 2016 (and yes, we think that’s good news). Indeed, most of the code you wrote in the past, before that unfortunate “Big Giant Hole in Ice” incident, will likely still work just fine on the current release of Perl5 — even if you originally wrote it against Perl 4 or even Perl 3.
Here’s the bad news: there’s been an incredible amount of innovation in not only Perl5-the-language, but also in Perl5-the-community and what the community considers to be accepted best practices and the right way to do things. It can be very frightening and confusing!
But wait, there’s more good news: if you come to this talk, you’ll get a guided tour of my (reasonably opinionated) views on what the consensus best practices are around issues such as which version of Perl5 to use, system Perl versus non-system Perl, Perl5 installation management packages, new language features and libraries to use, old language features and libraries to avoid, modern tooling, and even more!
Delivered at OpenWest 2016, 14 July 2016
How do we go from your Java code to the CPU assembly that actually runs it? Using high level constructs has made us forget what happens behind the scenes, which is however key to write efficient code.
Starting from a few lines of Java, we explore the different layers that constribute to running your code: JRE, byte code, structure of the OpenJDK virtual machine, HotSpot, intrinsic methds, benchmarking.
An introductory presentation to these low-level concerns, based on the practical use case of optimizing 6 lines of code, so that hopefully you to want to explore further!
Presentation given at the Toulouse (FR) Java User Group.
Video (in french) at https://www.youtube.com/watch?v=rB0ElXf05nU
Slideshow with animations at https://docs.google.com/presentation/d/1eIcROfLpdTU2_Z_IKiMG-AwqZGZgbN1Bs2E0nGShpbk/pub?start=true&loop=false&delayms=60000
Doctrine 2.0 Enterprise Persistence Layer for PHPGuilherme Blanco
One area that was mostly abandoned in applications is the Model layer. Doctrine is a project that brings enterprise support this layer through a powerful ORM implementation.
Allied with new support introduced in PHP 5.3, Doctrine 2.0 brings the concept of ORM in PHP to the next level. It introduces a couple of concepts known from other languages and areas, like Annotations, Object Query Languages and Parsers. This talk will introduce these new concepts as well as explain most of its architecture.
Does what it says on the tin. An introduction to Modern Perl programming aimed at programmers who have little or no experience in Perl.
I gave this course at the London Perl Workshop in November 2013.
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
Hello, unfrozen Paleolithic Perl programmers! Welcome to 2016!
First, let’s start with the good news: yes, we’re still programming in Perl5 in 2016 (and yes, we think that’s good news). Indeed, most of the code you wrote in the past, before that unfortunate “Big Giant Hole in Ice” incident, will likely still work just fine on the current release of Perl5 — even if you originally wrote it against Perl 4 or even Perl 3.
Here’s the bad news: there’s been an incredible amount of innovation in not only Perl5-the-language, but also in Perl5-the-community and what the community considers to be accepted best practices and the right way to do things. It can be very frightening and confusing!
But wait, there’s more good news: if you come to this talk, you’ll get a guided tour of my (reasonably opinionated) views on what the consensus best practices are around issues such as which version of Perl5 to use, system Perl versus non-system Perl, Perl5 installation management packages, new language features and libraries to use, old language features and libraries to avoid, modern tooling, and even more!
Delivered at OpenWest 2016, 14 July 2016
How do we go from your Java code to the CPU assembly that actually runs it? Using high level constructs has made us forget what happens behind the scenes, which is however key to write efficient code.
Starting from a few lines of Java, we explore the different layers that constribute to running your code: JRE, byte code, structure of the OpenJDK virtual machine, HotSpot, intrinsic methds, benchmarking.
An introductory presentation to these low-level concerns, based on the practical use case of optimizing 6 lines of code, so that hopefully you to want to explore further!
Presentation given at the Toulouse (FR) Java User Group.
Video (in french) at https://www.youtube.com/watch?v=rB0ElXf05nU
Slideshow with animations at https://docs.google.com/presentation/d/1eIcROfLpdTU2_Z_IKiMG-AwqZGZgbN1Bs2E0nGShpbk/pub?start=true&loop=false&delayms=60000
Doctrine 2.0 Enterprise Persistence Layer for PHPGuilherme Blanco
One area that was mostly abandoned in applications is the Model layer. Doctrine is a project that brings enterprise support this layer through a powerful ORM implementation.
Allied with new support introduced in PHP 5.3, Doctrine 2.0 brings the concept of ORM in PHP to the next level. It introduces a couple of concepts known from other languages and areas, like Annotations, Object Query Languages and Parsers. This talk will introduce these new concepts as well as explain most of its architecture.
PHP isn't only used as a web-based scripting language, it can also be used on the command line.
This talks explains the benefits of command line PHP. Additionally, process control using CLI PHP is explained.
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
Hello, unfrozen Paleolithic Perl programmers! Welcome to 2015!
First, let’s start with the good news: yes, we’re still programming in Perl5 in 2015 (and yes, we think that’s good news). Indeed, most of the code you wrote in the past, before that unfortunate "Big Giant Hole in Ice" incident, will likely still work just fine on the current release of Perl5 -- even if you originally wrote it against Perl 4 or even Perl 3.
Here’s the bad news: there’s been an incredible amount of innovation in not only Perl5-the-language, but also in Perl5-the-community and what the community considers to be accepted best practices and the right way to do things. It can be very frightening and confusing!
But wait, there’s more good news: if you come to this talk, you’ll get a guided tour of my (reasonably opinionated) views on what the consensus best practices are around issues such as which version of Perl5 to use, system Perl versus non-system Perl, Perl5 installation management packages, new language features and libraries to use, old language features and libraries to avoid, modern tooling, and even more!
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
A short introduction to the concepts of functional reactive programming, and their implementation in ReactiveCocoa, a framework for iOS and OS X developers.
This speech was given at CocoaHeads Paris, October 9th 2014
What You Need to Know About Lambdas - Jamie Allen (Typesafe)jaxLondonConference
Presented as a keynote at JAX London 2013
Lambdas are coming to the Java language in the upcoming release of Java 8! While this is generally great news, many Java developers have never experienced Lambdas before, and have not yet learned the best ways to use them for maximum productivity. In this talk, we will discuss best practices for using Lambdas in Java and other JVM-based languages, and we will investigate how we can make these constructs more usable in production.
Hooray, open source Swift finally arrived on Linux in December. Let’s see how easy it is to use Swift for your backend and why Swift is a good choice for safe and fast development.
Video presentation: https://www.youtube.com/watch?v=jLAFXQ1Av50
Most applications written in Ruby are great, but also exists evil code applying WOP techniques. There are many workarounds in several programming languages, but in Ruby, when it happens, the proportion is bigger. It's very easy to write Ruby code with collateral damage.
You will see a collection of bad Ruby codes, with a description of how these codes affected negatively their applications and the solutions to fix and avoid them. Long classes, coupling, misapplication of OO, illegible code, tangled flows, naming issues and other things you can ever imagine are examples what you'll get.
Lambdas and Streams Master Class Part 2José Paumard
These are the slides of the talk we made with Stuart Marks at Devoxx Belgium 2018. This second part covers the Stream API, reduction and the Collector API.
What is the state of lambda expressions in Java 11? Lambda expressions are the major feature of Java 8, having an impact on most of the API, including the Streams and Collections API. We are now living the Java 11 days; new features have been added and new patterns have emerged. This highly technical Deep Dive session will visit all these patterns, the well-known ones and the new ones, in an interactive hybrid of lecture and laboratory. We present a technique and show how it helps solve a problem. We then present another problem, and give you some time to solve it yourself. Finally, we present a solution, and open for questions, comments, and discussion. Bring your laptop set up with JDK 11 and your favorite IDE, and be prepared to think!
Diving into HHVM Extensions (PHPNW Conference 2015)James Titcumb
HHVM is currently gaining popularity at quite a pace, and it's a pretty exciting time for PHP runtimes. Have you ever wondered what is going on beneath this slick and super-speedy engine? I wondered that myself, so I dived into the internals of HHVM, discovering a treasure trove of awesome stuff. In this talk, I'll show you how HHVM itself works with a guided tour of the codebase, demonstrating how it all pieces together. I'll also show you a couple of ways to write your own incredible HHVM extension. You don't need to know C++ to understand this talk - just PHP language knowledge is enough.
PHP 7.1 is all ready to replace 7.0, adding even more features and goodness to the ground-breaking previous version.
Visibility for class constant, key specifications for list, void return type, mcrypt() deprecation, negative offset and warning for integer conversion.
We'll cover new features, deprecated ones and incompatibilities, so you're ready for your next migration.
PHP isn't only used as a web-based scripting language, it can also be used on the command line.
This talks explains the benefits of command line PHP. Additionally, process control using CLI PHP is explained.
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
Hello, unfrozen Paleolithic Perl programmers! Welcome to 2015!
First, let’s start with the good news: yes, we’re still programming in Perl5 in 2015 (and yes, we think that’s good news). Indeed, most of the code you wrote in the past, before that unfortunate "Big Giant Hole in Ice" incident, will likely still work just fine on the current release of Perl5 -- even if you originally wrote it against Perl 4 or even Perl 3.
Here’s the bad news: there’s been an incredible amount of innovation in not only Perl5-the-language, but also in Perl5-the-community and what the community considers to be accepted best practices and the right way to do things. It can be very frightening and confusing!
But wait, there’s more good news: if you come to this talk, you’ll get a guided tour of my (reasonably opinionated) views on what the consensus best practices are around issues such as which version of Perl5 to use, system Perl versus non-system Perl, Perl5 installation management packages, new language features and libraries to use, old language features and libraries to avoid, modern tooling, and even more!
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
A short introduction to the concepts of functional reactive programming, and their implementation in ReactiveCocoa, a framework for iOS and OS X developers.
This speech was given at CocoaHeads Paris, October 9th 2014
What You Need to Know About Lambdas - Jamie Allen (Typesafe)jaxLondonConference
Presented as a keynote at JAX London 2013
Lambdas are coming to the Java language in the upcoming release of Java 8! While this is generally great news, many Java developers have never experienced Lambdas before, and have not yet learned the best ways to use them for maximum productivity. In this talk, we will discuss best practices for using Lambdas in Java and other JVM-based languages, and we will investigate how we can make these constructs more usable in production.
Hooray, open source Swift finally arrived on Linux in December. Let’s see how easy it is to use Swift for your backend and why Swift is a good choice for safe and fast development.
Video presentation: https://www.youtube.com/watch?v=jLAFXQ1Av50
Most applications written in Ruby are great, but also exists evil code applying WOP techniques. There are many workarounds in several programming languages, but in Ruby, when it happens, the proportion is bigger. It's very easy to write Ruby code with collateral damage.
You will see a collection of bad Ruby codes, with a description of how these codes affected negatively their applications and the solutions to fix and avoid them. Long classes, coupling, misapplication of OO, illegible code, tangled flows, naming issues and other things you can ever imagine are examples what you'll get.
Lambdas and Streams Master Class Part 2José Paumard
These are the slides of the talk we made with Stuart Marks at Devoxx Belgium 2018. This second part covers the Stream API, reduction and the Collector API.
What is the state of lambda expressions in Java 11? Lambda expressions are the major feature of Java 8, having an impact on most of the API, including the Streams and Collections API. We are now living the Java 11 days; new features have been added and new patterns have emerged. This highly technical Deep Dive session will visit all these patterns, the well-known ones and the new ones, in an interactive hybrid of lecture and laboratory. We present a technique and show how it helps solve a problem. We then present another problem, and give you some time to solve it yourself. Finally, we present a solution, and open for questions, comments, and discussion. Bring your laptop set up with JDK 11 and your favorite IDE, and be prepared to think!
Diving into HHVM Extensions (PHPNW Conference 2015)James Titcumb
HHVM is currently gaining popularity at quite a pace, and it's a pretty exciting time for PHP runtimes. Have you ever wondered what is going on beneath this slick and super-speedy engine? I wondered that myself, so I dived into the internals of HHVM, discovering a treasure trove of awesome stuff. In this talk, I'll show you how HHVM itself works with a guided tour of the codebase, demonstrating how it all pieces together. I'll also show you a couple of ways to write your own incredible HHVM extension. You don't need to know C++ to understand this talk - just PHP language knowledge is enough.
PHP 7.1 is all ready to replace 7.0, adding even more features and goodness to the ground-breaking previous version.
Visibility for class constant, key specifications for list, void return type, mcrypt() deprecation, negative offset and warning for integer conversion.
We'll cover new features, deprecated ones and incompatibilities, so you're ready for your next migration.
I had include a video inside the presentation. The video will not work, if you want to see the video this is the website for it : http://www.youtube.com/watch?v=MlRpp68Zg1U. Also, I insert the video after slide 17.
The speech is timed to the coming release of PHP7 and is intended to review the state of the language and to give a slap for those who still hesitate to make use of available features.
This is the first set of slightly updated slides from a Perl programming course that I held some years ago for the QA team of a big international company.
I want to share it with everyone looking for intransitive Perl-knowledge.
The updates after 1st of June 2014 are made with the kind support of Chain Solutions (http://chainsolutions.net/)
A table of content for all presentations can be found at i-can.eu.
The source code for the examples and the presentations in ODP format are on https://github.com/kberov/PerlProgrammingCourse
go programming language basics
This presentation is a copy of one of the presentation in the slideshare
i just walk through the basic side of go programming language
its about a 45 mins presentation
more details about this language you get from golang.org refer this link
This is a slide for lecture in topic of super introduction to Laravel for Lecture in 31/10/2016 at 9:30.
SCL706, Applied Computer Science, KMUTT, Bangkok, Thailand.
Puppet Camp Duesseldorf 2014: Martin Alfke - Can you upgrade to puppet 4.x?NETWAYS
PuppetLabs takes care on the Puppet software stack and they provide regular updates of their software.
But how about your Puppet DSL code? How can you ensure that your code will also work fine on newer Puppet versions?
This talks shows basic steps and actions which should be done to ensure fully functional Puppet DSL code on newer Puppet versions.
I will show common old practices, which have been replaced by more modern ways in using Puppet and how to migrate to the new solution. Additionally I want you to learn how you can test your Puppet DSL code prior putting it onto a new Puppet master.
A (not entirely serious) talk that I gave at the London Perl Mongers technical meeting in March 2018.
It talks about how and why I build a web site listing the line of succession to the British throne back through history.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
2. London Perl Workshop 2016
Modern Perl Catch-Up
●
New things in Perl that you might have missed
●
Haven't we done this before?
●
"Modern Core Perl" December 2011
●
This is a sequel
3. London Perl Workshop 2016
Perl Releases
●
Perl is released annually
●
In the spring
●
Even-numbered versions are production releases
– 5.22, 5.24, 5.26
●
Odd-numbered versions are development releases
– 5.21, 5.23, 5.25
●
5.25 will become 5.26
4. London Perl Workshop 2016
Perl Support
●
Perl releases are officially supported for two
years
● perldoc perlpolicy
●
Currently 5.22 and 5.24
●
Limited support for older versions
●
Longer support from vendors
5. London Perl Workshop 2016
Update Your Perl
●
Using the system Perl is a bad idea
●
Often out of date
● perlbrew and plenv
7. London Perl Workshop 2016
5.16
●
5.16.0 - 20 May 2012
●
5.16.1 - 08 Aug 2012
●
5.16.2 - 01 Nov 2012
●
5.16.3 - 11 Mar 2013
8. London Perl Workshop 2016
5.16 Features
● __SUB__
●
Fold case
●
Devel::DProf removed
●
perlexperiment
●
perlootut
●
Old OO docs removed
●
Unicode 6.1
9. London Perl Workshop 2016
__SUB__
●
New special source code token
● Like __PACKAGE__, __FILE__ and __LINE__
●
Returns a reference to the current subroutine
●
Easier to write recursive subroutines
10. London Perl Workshop 2016
Recursive without __SUB__
sub fib {
my ($n) = @_;
return 1 if $n <= 2;
return fib($n - 1) + fib($n - 2);
}
11. London Perl Workshop 2016
Recursive with __SUB__
sub fib {
my ($n) = @_;
return 1 if $n <= 2;
return __SUB__->($n - 1) +
__SUB__->($n - 2);
}
12. London Perl Workshop 2016
Recursive with __SUB__
sub fib {
my ($n) = @_;
return 1 if $n <= 2;
return __SUB__->($n - 1) +
__SUB__->($n - 2);
}
13. London Perl Workshop 2016
Fold Case
● lc($this) eq lc($that)
●
Unicode complicates everything
●
Lower-case comparisons can fail
●
As can upper-case comparisons
●
"Fold-case" is guaranteed to work
● fc($this) eq fc($that)
● Also F (like L and U)
14. London Perl Workshop 2016
Devel::DProf Removed
●
Devel::DProf was an old profiling tool
●
Few people know how to use it
●
We're better off without it
●
Devel::NYTProf is much better
15. London Perl Workshop 2016
perldoc perlexperiment
●
New documentation page
●
Lists the experiments in the current version of
Perl
– Vital to use the right version
● Compare perldoc experimental
16. London Perl Workshop 2016
perldoc perlootut
●
New OO tutorial
●
Improvement on old version
●
Up to date
●
Covers OO frameworks
– Moose, Moo, Class::Accessor, Class::Tiny, Role::Tiny
●
So consider those the "approved" list of OO
frameworks
17. London Perl Workshop 2016
Old OO docs removed
●
Outdated OO documentation removed
●
perlboot (basic OO tutorial)
●
perltoot (Tom's OO tutorial)
●
perlbot (bag of object tricks)
●
perlootut replaces all of these
18. London Perl Workshop 2016
Unicode 6.1
●
Unicode complicates everything!
●
http://www.unicode.org/versions/Unicode6.1.0
●
"This latest version adds characters to support
additional languages of China, other Asian
countries, and Africa. It also addresses
educational needs in the Arabic-speaking world.
A total of 732 new characters have been added."
20. London Perl Workshop 2016
5.18
●
5.18.0 - 18 May 2013
●
5.18.1 - 12 Aug 2013
●
5.18.2 - 06 Jan 2013
●
5.18.3 - 01 Oct 2014
●
5.18.4 - 01 Oct 2014
21. London Perl Workshop 2016
5.18 Features
● no warnings experimental::foo
●
Hash rework
●
Lexical subroutines
●
Smartmatch is experimental
● Lexical $_ is experimental
● $/ = $n reads $n characters (not bytes)
● qw(...) needs extra parentheses
●
Unicode 6.2
22. London Perl Workshop 2016
no warnings experimental::foo
●
New "warnings" category - experimental
●
Warns if you use experimental features
● no warnings experimental::foo
●
"Don't warn me that I'm using experimental
feature 'foo'"
●
"I know what I'm doing here!"
23. London Perl Workshop 2016
Hash Rework
●
Big change in the way hashes are implemented
●
Hash ordering is even more random
●
Random seed in hashing algorithm
● keys (and values, etc) returns different order
each run
●
Algorithmic complexity attacks
24. London Perl Workshop 2016
Example
$ perl -E'%h=(one=>1,two=>2,three=>3); say keys %h'
onethreetwo
$ perl -E'%h=(one=>1,two=>2,three=>3); say keys %h'
threetwoone
$ perl -E'%h=(one=>1,two=>2,three=>3); say keys %h'
threetwoone
$ perl -E'%h=(one=>1,two=>2,three=>3); say keys %h'
threeonetwo
25. London Perl Workshop 2016
Previously
●
With earlier versions, the same hash would
return the keys in the same order each time
●
Now you can't rely on that
●
Exposes weaknesses in tests
●
Careful testing required!
26. London Perl Workshop 2016
Lexical Subroutines
●
Experimental feature
● no warnings
experimental::lexical_subs
●
Truly private subroutines
●
Only visible within your lexical scope
● state sub foo { ... }
● my sub bar { ... }
27. London Perl Workshop 2016
state vs my
●
Similar to variable declarations
● my subroutines are recreated each time their scope is
executed
● state subroutines are created once
● state subroutines are slightly faster
● my subroutines are required for closures
● Also our for access to a global subroutine of the same
name
28. London Perl Workshop 2016
Private Subroutines
● We name private subroutines with leading _
● sub _dont_run_this { ... }
●
"Please don't run this"
●
We can now enforce this
● state sub _cant_run_this { ... }
●
Only visible within current lexical scope
29. London Perl Workshop 2016
Smartmatch is Experimental
●
Smartmatch is confusing
●
Smartmatch has changed a few times
●
Smartmatch should probably be avoided
●
Smartmatch is experimental
● no warnings
experimental::smartmatch
● Warns on ~~, given and when
30. London Perl Workshop 2016
Smartmatch
“Smart match, added in v5.10.0 and significantly revised
in v5.10.1, has been a regular point of complaint.
Although there are a number of ways in which it is
useful, it has also proven problematic and confusing for
both users and implementors of Perl. There have been a
number of proposals on how to best address the
problem. It is clear that smartmatch is almost certainly
either going to change or go away in the future. Relying
on its current behavior is not recommended.”
31. London Perl Workshop 2016
Lexical $_ is Experimental
●
Introduced in 5.10
●
"it has caused much confusion with no obvious
solution"
● no warnings
experimental::lexical_topic
●
Spoilers: Removed in 5.24
32. London Perl Workshop 2016
$/ = $n Reads $n Characters
● Setting $/ to a reference to an integer
●
(Previously) Reads that number of bytes
●
(Now) Reads that number of characters
●
This is almost certainly what you want
●
Unicode complicates everything
33. London Perl Workshop 2016
qw(...) Needs Extra Parentheses
●
Correcting a parsing bug
● foreach qw(foo bar baz) { ... }
●
Perl previously added the missing parentheses
●
Now it doesn't
● foreach (qw(foo bar baz)) { ... }
34. London Perl Workshop 2016
Unicode 6.2
●
Unicode complicates everything!
●
http://www.unicode.org/versions/Unicode6.2.0
●
"Version 6.2 of the Unicode Standard is a special
release dedicated to the early publication of the
newly encoded Turkish lira sign."
36. London Perl Workshop 2016
5.20
●
5.20.0 - 27 May 2014
●
5.20.1 - 14 Sep 2014
●
5.20.2 - 14 Feb 2015
●
5.20.3 - 12 Sep 2015
37. London Perl Workshop 2016
5.20 Features
●
Subroutine signatures (experimental)
● %hash{...} and %array[...] slices
●
Postfix dereferencing (experimental)
●
Unicode 6.3
38. London Perl Workshop 2016
Subroutine Signatures
●
Subroutines can now have a signature
● sub foo ($bar, $baz) { ... }
● use feature 'signatures'
●
Experimental
● no warnings
experimental::signatures
39. London Perl Workshop 2016
Mandatory Parameters
● sub foo ($bar, $baz) { ... }
●
Checks the number of parameters
●
Throws exception if the wrong number
● Assigns parameters to $bar and $baz
40. London Perl Workshop 2016
Unnamed Parameter
●
Parameters can be unnamed
● Use $ without a name
● sub foo ($bar, $, $baz) { ... }
●
Must pass three parameters
●
Second parameter is not assigned to a variable
● All parameters still in @_
41. London Perl Workshop 2016
Optional Parameters
●
Make parameters optional by giving them a
default
● sub foo ($bar, $baz = 0) { ... }
●
Call with one or two parameters
● $baz set to 0 by default
42. London Perl Workshop 2016
Slurpy Parameters
●
'Slurpy' parameters follow postional parameters
●
Assign them to an array
● sub foo ($bar, @baz) { ... }
● foo('a', 'b', 'c');
●
Or a hash
● sub foo ($bar, %baz) { ... }
● foo('a', 'b', 'c');
● foo('a', b => 'c');
43. London Perl Workshop 2016
%hash{...} and %array[...]
Slices
●
Old array slices
● @slice = @array[1, 3..5]
●
Returns four elements from the array
●
Also with hashes
● @slice = @hash{'foo', 'bar', 'baz'}
●
Returns three values from the hash
44. London Perl Workshop 2016
New Hash Slices
● New %h{...} slice syntax
● %subhash =
%hash{'foo', 'bar', 'baz'}
●
Returns three key/value pairs
●
Also with arrays
● @slice = %array[1, 3..5]
●
Returns four index/element pairs
45. London Perl Workshop 2016
Postfix Dereferencing
● no warnings experimental::postderef
●
New syntax for dereferencing
●
Follows left-to-right rules throughout
46. London Perl Workshop 2016
Postfix vs Prefix
● $sref->$*; # same as ${ $sref }
● $aref->@*; # same as @{ $aref }
● $href->%*; # same as %{ $href }
● $cref->&*; # same as &{ $cref }
● $gref->**; # same as *{ $gref }
47. London Perl Workshop 2016
Left to Right Throughout
●
Old style
● @arr = @{$r->{foo}[0]{bar}}
●
New style
● @arr = $r->{foo}[0]{bar}->@*
48. London Perl Workshop 2016
Unicode 6.3
●
Unicode complicates everything!
●
http://www.unicode.org/versions/Unicode6.3.0
●
"Version 6.3 of the Unicode Standard is a special
release focused on delivering significantly
improved bidirectional behavior."
50. London Perl Workshop 2016
5.22
●
5.22.0 - 01 Jun 2015
●
5.22.1 - 13 Dec 2015
●
5.22.2 - 29 Apr 2016
51. London Perl Workshop 2016
5.22 Features
●
New bitwise operators
●
Double diamond operator
● New regex boundaries b{...}
● New /n option on regexes
●
Unicode 7.0
● Omitting % and & on hash and array names now
an error
52. London Perl Workshop 2016
5.22 Features (cont)
● defined(@array) and defined(%hash) now
fatal error
● %hash->{$key} and @array->[$idx] now fatal
errors
●
perlunicook
●
find2perl, a2p, s2p removed
●
CGI removed
●
Module::Build removed
53. London Perl Workshop 2016
New Bitwise Operators
●
Old bitwise operators
● ~, &, |, ^
●
Expect numbers as operands
●
"Work" on strings too
●
No numeric/string differentiation
54. London Perl Workshop 2016
New Bitwise Operators
● use feature 'bitwise';
● no warnings
'experimental::bitwise';
● Or use experimental 'bitwise';
●
Old operators are always numeric
●
New string bitwise operators
● ~., &., |., ^.
55. London Perl Workshop 2016
Double Diamond Operator
● <<>>
● Like <>
● Uses three-arg open()
● All elements of @ARGV treated as filenames
● |foo will no longer work
56. London Perl Workshop 2016
New Regex Boundaries
● Extensions to b
● b{wb} - Word boundary
– Like b but cleverer about punctuation within words
● b{sb} - Sentence boundary
● b{gcb} - Grapheme cluster boundary
– Unicode complicates everything!
57. London Perl Workshop 2016
/n Option on Regexes
● New option for m/.../ and s/.../.../
●
Turns off call capturing
● /(w+)/ - fills in $1
● /(w+)/n - doesn't
● See also (?:w+)
58. London Perl Workshop 2016
Unicode 7.0
●
Unicode complicates everything!
●
http://www.unicode.org/versions/Unicode7.0.0
●
"Unicode 7.0 adds a total of 2,834 characters,
encompassing 23 new scripts and many new
symbols, as well as character additions to many
existing scripts"
59. London Perl Workshop 2016
Unicode 7.0
●
Two newly adopted currency symbols: the manat, used in
Azerbaijan, and the ruble, used in Russia and other countries
●
Pictographic symbols (including many emoji), geometric
symbols, arrows, and ornaments originating from the
Wingdings and Webdings sets
●
Twenty-three new lesser-used and historic scripts extending
support for written languages of North America, China, India,
other Asian countries, and Africa
●
Letters used in Teuthonista and other transcriptional systems,
and a new notational set, Duployan
60. London Perl Workshop 2016
Omitting % and @ on Hash and Array
Names
●
You used to be able to omit sigils in some
circumstances
●
Very stupid thing to do
●
Deprecation warning since 5.000 (1994!)
●
Now a fatal error
61. London Perl Workshop 2016
defined(@array) and
defined(%hash) now Fatal Errors
●
Another parser bug fixed
●
Deprecated since 5.6.1
●
Deprecation warning since 5.16
●
Now a fatal error
62. London Perl Workshop 2016
%hash->{$key} and @array-
>[$idx] now Fatal Errors
●
Bet you didn't know you could do that
●
Now you can't
●
Deprecated since "before 5.8"
●
Now a fatal error
63. London Perl Workshop 2016
perlunicook
●
New cookbook of Unicode recipes
●
By Tom Christiansen
●
Well worth reading
●
If you think you don't care about Unicode,
you're wrong
●
Unicode complicates everything
64. London Perl Workshop 2016
find2perl, a2p, s2p Removed
●
Old programs that converted from standard
Unix utilities
●
No-one had used them for years
●
No-one had maintained them for years
●
No-one cares they're gone
65. London Perl Workshop 2016
CGI Removed
●
Contentious
●
CGI is a terrible way to write web applications
●
Including CGI.pm with Perl was seen as an
endorsement
●
Best to remove it
●
Use PSGI/Plack instead
66. London Perl Workshop 2016
Module::Build Removed
●
Written as a replacement for
ExtUtils::MakeMaker
●
Pure Perl
● Didn't use make
●
Cross-platform
●
Failed experiment
69. London Perl Workshop 2016
5.24 Features
●
Postfix dereferencing no longer experimental
●
Unicode 8.0
● b{lb}
●
Shebang redirects to Perl6
●
autoderef removed
70. London Perl Workshop 2016
Postfix Dereferecing
●
Added in 5.20
●
No longer experimental
71. London Perl Workshop 2016
Unicode 8.0
●
Unicode complicates everything!
●
http://www.unicode.org/versions/Unicode8.0.0
●
"Unicode 8.0 adds a total of 7,716 characters,
encompassing six new scripts and many new
symbols, as well as character additions to
several existing scripts."
72. London Perl Workshop 2016
Unicode 8.0
●
A set of lowercase Cherokee syllables, forming case pairs with the
existing Cherokee characters
●
A large collection of CJK unified ideographs
●
Emoji symbols and symbol modifiers for implementing skin tone
diversity
●
Georgian lari currency symbol
●
Letters to support the Ik language in Uganda, Kulango in the Côte
d’Ivoire, and other languages of Africa
●
The Ahom script for support of the Tai Ahom language in India
●
Arabic letters to support Arwi—the Tamil language written in the Arabic
script
73. London Perl Workshop 2016
b{lb}
●
New regex boundary
●
Matches a (potential) lib break
●
Place where you could break a line
●
Unicode property
●
See also Unicode::Linebreak
74. London Perl Workshop 2016
Shebang Redirects to Perl 6
●
Perl will start another program given in the
shebang
● E.g. #!/usr/bin/ruby
●
Only if the path doesn't contain "perl"
●
Now works for "perl6" too
75. London Perl Workshop 2016
Auto-deref Removed
●
Added in 5.14
●
Array and hash functions work on references
● push @$arr_ref vs push $arr_ref
● keys %$hash_ref vs keys %$hash_ref
●
"Deemed unsuccessful"
80. London Perl Workshop 2016
Staying Up To Date
●
How do you know a new version of Perl has
been released?
●
How do you know what is in a new release of
Perl?
81. London Perl Workshop 2016
Keep Up To Date With Perl News
●
@perlfoundation
●
Reddit
●
Perl Weekly
82. London Perl Workshop 2016
@perlfoundation
●
The Perl Foundation Twitter account
●
~7,000 followers
●
Run by volunteers
●
Tries to be first with Perl news
83. London Perl Workshop 2016
Reddit
●
Perl subreddit
●
http://reddit.com/r/perl
●
Links to interesting Perl articles/announcements
●
Also help students with their Perl homework
84. London Perl Workshop 2016
Perl Weekly
●
Weekly Perl email
●
Links to interesting Perl articles/announcements
●
Curated by humans
●
Web feed
●
Highly recommended
85. London Perl Workshop 2016
What Is In The New Release?
● Read the perldelta man page
●
Included with every Perl release
●
Older versions available too
87. London Perl Workshop 2016
Conclusion
●
Perl has an annual release cycle
●
Interesting/useful changes in each release
●
Worth keeping up to date
●
A reason to upgrade?