- 1. Advanced Perl
- 2. Perl References
- 2.1. Uses cases for references
- 2.2. References
- 2.3. Array References
- 2.4. Hash References
- 2.5. Scalar references
- 2.6. Subroutine references
- 2.7. Passing values to a function
- 2.8. Add two (or more) arrays
- 2.9. Add two arrays
- 2.10. Array References
- 2.11. Process arrays without copying
- 2.12. Scope of variables
- 2.13. Reference counting
- 2.14. More Reference Counting
- 2.15. Process arrays without copying even the return values
- 2.16. Debugging (pretty printing)
- 2.17. Change values in a reference
- 2.18. Exercise: double numbers
- 2.19. Exercise: Add many arrays
- 2.20. Exercise: Function to compare two hashes
- 2.21. Solution: Double numbers
- 2.22. Solution: Add many arrays
- 2.23. Solution: Add many arrays
- 2.24. Solution: Function to compare two hashes
- 2.25. Anonymous Arrays
- 2.26. Array of Arrays
- 2.27. Array of Arrays (AoA)
- 2.28. Many dimensional arrays
- 2.29. Anonymous hashes
- 2.30. Hash of Hashes (HoH)
- 2.31. More complex data structures
- 2.32. Memory leak with cross references
- 2.33. Memory leak with cross references - weaken
- 2.34. Read CSV file
- 2.35. Exercise: read in an ini file
- 2.36. Exercise: improve the csv reader
- 2.37. Solution: Read ini file
- 2.38. Solution: improve the csv reader
- 2.39. autovivification
- 2.40. Scalar references in Getopt::Long
- 2.41. Anonymous subroutines
- 2.42. Uses of Subroutine references
- 2.43. Exercise: DNA Sequence Analyzer
- 2.44. Solution: DNA Sequence Analyzer
- 2.45. Exercise: DNA Sequence Analyzer with callback
- 2.46. Solution: DNA Sequence Analyzer with callback
- 2.47. Exercise: DNA Sequence Analyzer with shortcut
- 2.48. Solution: DNA Sequence Analyzer with shortcut
- 2.49. Dispatch Table
- 2.50. Dispatch Table using symbolic references
- 2.51. The ref() function
- 2.52. Copy a data structure
- 2.53. Deep copy
- 2.54. Deep copy - Storable dclone
- 2.55. Serialization
- 2.56. Data::Dumper
- 2.57. Data::Dumper both dump and restore
- 2.58. Storable
- 2.59. Storable in memory freezing
- 2.60. YAML
- 2.61. YAML in one file
- 2.62. JSON in one file
- 2.63. Main uses of references
- 2.64. Exercise: save ini and csv as YAML
- 2.65. Exercise: Create a cache for NetSlow
- 2.66. Exercise: create a function that generates numbers multipliers
- 2.67. Solution: save ini and csv as YAML
- 2.68. Solution: Create a cache for NetSlow
- 2.69. Solution: NetSlow cache with timeout
- 2.70. Resources
- 3. Processes and signals
- 3.1. Signals and the kill function
- 3.2. Catch signals
- 3.3. Exercise: Catch ctrl-c and ask continue or terminate?
- 3.4. Solution: Catch ctrl-c and ask
- 3.5. Graceful termination of process
- 4. Advanced slides
- 4.1. Always use strict and warnings
- 4.2. Avoid warnings
- 4.3. Turn off warnings selectively and in a small scope
- 4.4. Catch and log warnings
- 4.5. splain and use diagnostics
- 4.6. Fatal warnings
- 4.7. Logging Exceptions
- 4.8. Always open files in the new way
- 4.9. Array slices
- 4.10. Array slices on the fly
- 4.11. Hash slices
- 4.12. Hash slices in assignment
- 4.13. splice
- 4.14. LIST and SCALAR context
- 4.15. wantarray
- 4.16. wantarray example
- 4.17. Slow sorting
- 4.18. Speed up sorting
- 4.19. Schwartzian transformation
- 4.20. Compilation phases: BEGIN, CHECK, INIT, END
- 4.21. AUTOLOAD
- 4.22. Static variable
- 4.23. Exercise: create counter
- 4.24. Solution: create counter
- 4.25. Saved variable: local
- 4.26. autodie
- 4.27. Modern::Perl
- 4.28. Perl::Critic
- 4.29. Perl::Tidy
- 4.30. caller
- 4.31. Log::Dispatch
- 4.32. Log::Log4perl easy
- 4.33. Exercise: Log::Dispatch
- 4.34. Solution Log::Dispatch
- 5. Functional Programming in Perl
- 5.1. Programming Paradigms
- 5.2. Functional programming
- 5.3. grep
- 5.4. grep to filter files based on modification date
- 5.5. Imitating the Unix/Linux grep command in Perl
- 5.6. map
- 5.7. Use map to filter values
- 5.8. Map to add more elements
- 5.9. Use map to filter and enrich
- 5.10. Create a hash from an array using map
- 5.11. Unique values
- 5.12. Unique values - improved
- 5.13. Unique values using grep
- 5.14. Uniq with List::MoreUtils
- 5.15. Closures
- 6. Perl Libraries and Modules
- 6.1. Lack of code reuse
- 6.2. Perl library (perl4 style)
- 6.3. Problems with Libraries
- 6.4. Prefix everything with unique name
- 6.5. Namespaces
- 6.6. Solution with namespace
- 6.7. Modules
- 6.8. Packages, @INC and Namespace hierarchy
- 6.9. use, require and import
- 6.10. Export - Import
- 6.11. Restrict the import
- 6.12. On demand Import
- 6.13. Importing
- 6.14. Modules - behind the scene
- 6.15. Tools for packaging and distribution
- 6.16. Packaging modules
- 6.17. Makefile.PL of ExtUtils::MakeMaker
- 6.18. Makefile.PL of Module::Install
- 6.19. Build.PL of Module::Build
- 6.20. Changes and README
- 6.21. MANIFEST and MANIFEST.SKIP
- 6.22. A script
- 6.23. A module
- 6.24. Packaging with Makefile.PL
- 6.25. Packaging with Build.PL
- 6.26. A test file
- 6.27. Writing Tests
- 6.28. Exercises: Multiply numbers
- 6.29. Solution: Multiply numbers
- 6.30. Overview
- 7. Error Handling
- 7.1. Returning error status or throwing exception?
- 7.2. eval block
- 7.3. Exception handling with Try::Tiny
- 7.4. Carp
- 7.5. Carp::Clan
- 7.6. The problem with die and croak
- 7.7. Exception::Class
- 7.8. Processing exceptions
- 7.9. Exercise
- 7.10. Solution
- 7.11. Solution
- 8. Introduction to Moose
- 8.1. Moose Constructor
- 8.2. Test Moose Constructor
- 8.3. Moose Attribute
- 8.4. Test Moose Attribute
- 8.5. Moose Attribute Type
- 8.6. Test Moose Attribute Type
- 8.7. Moose Attribute Type class
- 8.8. Test Moose Attribute Type class
- 8.9. Moose Attribute - create your own subtype
- 8.10. Test Moose Attribute - create your own subtype
- 8.11. Moose Attribute - coercion
- 8.12. Test Moose Attribute - coercion
- 8.13. Moose Enumeration
- 8.14. Moose Attributes Overview
- 8.15. Inheritance
- 8.16. Testing Inheritance
- 8.17. MooseX::StrictConstructor
- 8.18. Testing Strict attributes
- 8.19. Encapsulation
- 8.20. Class data
- 8.21. Special actions during object construction
- 8.22. Singleton in Moose
- 8.23. Destructor in Moose
- 9. Running subprocess
- 9.1. Possibilities
- 10. Prima
- 10.1. Prima Hello World
- 11. wxPerl - wxWidgets for Perl
- 11.1. wxPerl - Hello World
- 12. Microsoft Windows
- 12.1. Win32 examples
- 13. PSGI
- 13.1. PSGI Cookbook
- 14. Parallel processing
- 14.1. Types of problems
- 14.2. Types of solutions
- 14.3. Tasks
- 14.4. Measurements on 32 core
- 14.5. Measurements on 4 core
- 14.6. The Hardware
- 14.7. Installations
- 14.8. Fork
- 14.9. Fork with functions details
- 14.10. Fork random and seed
- 14.11. Fork without functions
- 14.12. Fork details
- 14.13. Fork many
- 14.14. Parent process ID
- 14.15. pstree
- 14.16. htop
- 14.17. Active non-blocking waiting with waitpid
- 14.18. Non-blocking waiting with waitpid - multiple forks
- 14.19. Non-blocking waiting, rerun on failure
- 14.20. Functions to be speed up
- 14.21. Counter process
- 14.22. Forked counter process
- 14.23. Prepare CSV files
- 14.24. Process CSV files
- 14.25. Use Parallel::ForkManager
- 14.26. Return values using Parallel::ForkManager
- 14.27. Forked process CSV files
- 14.28. HTTP GET
- 14.29. Forked HTTP requests
- 14.30. Exercise: Process Excel files
- 14.31. Exercise: Web crawler
- 14.32. MCE - Many-Core Engine
- 14.33. MCE - map running in parallel
- 14.34. MCE - map with init
- 14.35. other modules
- 15. Database access using Perl DBI
- 15.1. Architecture of a DBI Application
- 15.2. Create Sample Database
- 15.3. Connect to database
- 15.4. SELECT with one result
- 15.5. SELECT with more results
- 15.6. SELECT, prepare with placeholders
- 15.7. SELECT, using hashref
- 15.8. INSERT
- 15.9. UPDATE
- 16. Advanced Database access using Perl DBI
- 16.1. Data integrity
- 16.2. Transactions
- 16.3. Sample database creation
- 16.4. Disconnect from the database
- 16.5. Attributes
- 16.6. Error handling
- 16.7. Debugging (Trace levels)
- 17. Database access using DBIx::Class
- 17.1. DBIx::Class
- 17.2. Create Sample Database
- 18. Internet Explorer
- 18.1. Win32::IE::Mechanize
- 18.2. Accessing Google
- 18.3. Examples
- 19. X-Windows
- 19.1. X11
- 19.2. X11 Tools
- 19.3. X11::GUITest
- 19.4. LDTP - Linux Desktop Testing Project
- 19.5. Manual steps
- 19.6. X11: Launch the application
- 19.7. Let's see the coordinates
- 19.8. Where is this top left corner ?
- 19.9. And let's see the rest of the coordinates
- 19.10. Smooth on the edges
- 19.11. Closing the window
- 19.12. Placing the cursor on one of the buttons and clicking on it
- 19.13. So let's do all the calculations
- 19.14. Fetch the list of Child Windows
- 19.15. Locate the Child Windows
- 19.16. Using the keyboard
- 19.17. Separate the keystrokes
- 19.18. Full solution for xcalc