From a21d71882f62a59fcbb4f2e1295fa5fd15173a6e Mon Sep 17 00:00:00 2001 From: David Liedle Date: Sat, 20 Sep 2025 11:51:52 -0600 Subject: [PATCH] Fix technical issues and improve consistency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Correct README chapter links to match actual filenames - Fix Modern::Perl version from invalid '2023' to valid '2018' - Ensure all code examples use proper Perl syntax and best practices - Maintain consistency across all chapters 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- 02-getting-started-modern-perl-setup.md | 4 ++-- ...l-fundamentals-variables-and-data-types.md | 6 ++--- 04-control-flow-and-subroutines.md | 4 ++-- 05-regular-expressions-perls-superpower.md | 4 ++-- 06-file-io-and-directory-operations.md | 8 +++---- 07-advanced-text-processing.md | 10 ++++---- 08-working-with-csv-json-xml.md | 6 ++--- 09-log-file-analysis-and-monitoring.md | 8 +++---- 10-process-management-and-system-commands.md | 6 ++--- 11-network-programming-and-web-scraping.md | 6 ++--- 12-database-operations-with-dbi.md | 10 ++++---- 13-configuration-management-and-templating.md | 12 +++++----- 14-cpan-the-treasure-trove.md | 6 ++--- 15-object-oriented-perl.md | 4 ++-- 16-testing-and-debugging.md | 4 ++-- 17-performance-and-optimization.md | 4 ++-- 18-building-command-line-tools.md | 6 ++--- 19-system-monitoring-and-alerting-scripts.md | 10 ++++---- 20-automation-workflows-and-cron-jobs.md | 12 +++++----- 21-restful-apis-and-web-services.md | 6 ++--- 22-security-best-practices.md | 16 ++++++------- README.md | 24 +++++++++---------- 22 files changed, 88 insertions(+), 88 deletions(-) diff --git a/02-getting-started-modern-perl-setup.md b/02-getting-started-modern-perl-setup.md index 02fe651..81ae19f 100644 --- a/02-getting-started-modern-perl-setup.md +++ b/02-getting-started-modern-perl-setup.md @@ -141,7 +141,7 @@ Let's write a simple script using modern Perl features. Create a file called `he ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -299,7 +299,7 @@ Here's a typical workflow for developing Perl scripts in 2025: 1. **Start with a shebang and Modern::Perl** ```perl #!/usr/bin/env perl - use Modern::Perl '2023'; + use Modern::Perl '2018'; ``` 2. **Write your code** diff --git a/03-perl-fundamentals-variables-and-data-types.md b/03-perl-fundamentals-variables-and-data-types.md index 9f12198..75eb089 100644 --- a/03-perl-fundamentals-variables-and-data-types.md +++ b/03-perl-fundamentals-variables-and-data-types.md @@ -16,7 +16,7 @@ This isn't just syntax; it's documentation. When you see `$name`, you know it's ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; my $server = 'web01.prod'; # Scalar: single value my @servers = qw(web01 web02 web03); # Array: list of values @@ -198,7 +198,7 @@ my @values = values %config; ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Count occurrences of each IP in a log my %ip_count; @@ -355,7 +355,7 @@ Let's put it all together with a practical script: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Time::Piece; # Configuration diff --git a/04-control-flow-and-subroutines.md b/04-control-flow-and-subroutines.md index bfc4f94..4fe8143 100644 --- a/04-control-flow-and-subroutines.md +++ b/04-control-flow-and-subroutines.md @@ -22,7 +22,7 @@ This isn't just syntactic sugar—it's a different way of thinking about code: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Traditional vs Perl style my $file = 'config.txt'; @@ -435,7 +435,7 @@ Let's combine everything into a real-world script: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; use Try::Tiny; diff --git a/05-regular-expressions-perls-superpower.md b/05-regular-expressions-perls-superpower.md index c0ef660..c4bd016 100644 --- a/05-regular-expressions-perls-superpower.md +++ b/05-regular-expressions-perls-superpower.md @@ -12,7 +12,7 @@ Regular expressions aren't bolted onto Perl as an afterthought or imported from ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; my $text = "The server at 192.168.1.100 responded in 245ms"; @@ -379,7 +379,7 @@ Let's build a simple web scraper using Perl's regex powers: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use LWP::Simple; use HTML::Entities; diff --git a/06-file-io-and-directory-operations.md b/06-file-io-and-directory-operations.md index 56493d9..d8085d9 100644 --- a/06-file-io-and-directory-operations.md +++ b/06-file-io-and-directory-operations.md @@ -12,7 +12,7 @@ Forget what you learned in 1999. Modern Perl uses three-argument open: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Old way (DON'T DO THIS) open FILE, "data.txt"; # Ambiguous and unsafe @@ -379,7 +379,7 @@ print $out $packed; ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Copy; use File::Path qw(make_path); use POSIX qw(strftime); @@ -443,7 +443,7 @@ rotate_logs('/var/log/myapp.log', 30); ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Find; use File::Copy; use Digest::MD5; @@ -525,7 +525,7 @@ sub files_differ { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Text::CSV; use JSON::XS; diff --git a/07-advanced-text-processing.md b/07-advanced-text-processing.md index b8ddd5d..5071aa3 100644 --- a/07-advanced-text-processing.md +++ b/07-advanced-text-processing.md @@ -10,7 +10,7 @@ Sometimes regex isn't enough. When you need to parse complex, nested structures, ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Parse::RecDescent; # Define a grammar for simple arithmetic @@ -353,7 +353,7 @@ for my $change (@diff) { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Define a simple query DSL package QueryDSL; @@ -420,7 +420,7 @@ say $query->to_sql(); # WHERE status = 'active' AND age > '18' ```perl # Create a readable configuration DSL package ConfigDSL; -use Modern::Perl '2023'; +use Modern::Perl '2018'; our %CONFIG; @@ -486,7 +486,7 @@ print Dumper(\%ConfigDSL::CONFIG); ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; sub analyze_text { my ($text) = @_; @@ -620,7 +620,7 @@ sub fuzzy_grep { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; diff --git a/08-working-with-csv-json-xml.md b/08-working-with-csv-json-xml.md index bc05881..c512f00 100644 --- a/08-working-with-csv-json-xml.md +++ b/08-working-with-csv-json-xml.md @@ -12,7 +12,7 @@ CSV looks simple. It's just commas and values, right? Wrong. There are quotes, e ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Text::CSV; # Basic CSV reading @@ -480,7 +480,7 @@ sub validate_xml { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -603,7 +603,7 @@ $converter->convert('data.xml', 'data.yaml', 'xml', 'yaml'); ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use LWP::UserAgent; use JSON::XS; use Text::CSV; diff --git a/09-log-file-analysis-and-monitoring.md b/09-log-file-analysis-and-monitoring.md index 91881b2..141c9b7 100644 --- a/09-log-file-analysis-and-monitoring.md +++ b/09-log-file-analysis-and-monitoring.md @@ -10,7 +10,7 @@ Logs are the heartbeat of your systems. They tell you what happened, when it hap ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -184,7 +184,7 @@ sub alert { ```perl package LogAnalyzer; -use Modern::Perl '2023'; +use Modern::Perl '2018'; sub new { my ($class) = @_; @@ -356,7 +356,7 @@ sub monitor_request_rate { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Find; use IO::Uncompress::Gunzip qw(gunzip); @@ -643,7 +643,7 @@ sub parse_timestamp { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Tail; use Email::Simple; use Email::Sender::Simple qw(sendmail); diff --git a/10-process-management-and-system-commands.md b/10-process-management-and-system-commands.md index 18a5525..92cef33 100644 --- a/10-process-management-and-system-commands.md +++ b/10-process-management-and-system-commands.md @@ -10,7 +10,7 @@ System administration isn't just about files and text—it's about controlling p ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Method 1: system() - Returns exit status my $status = system('ls', '-la', '/tmp'); @@ -535,7 +535,7 @@ sub get_cpu_info { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use POSIX qw(setsid); sub daemonize { @@ -628,7 +628,7 @@ sub do_work { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; diff --git a/11-network-programming-and-web-scraping.md b/11-network-programming-and-web-scraping.md index 6ab7619..3bcd167 100644 --- a/11-network-programming-and-web-scraping.md +++ b/11-network-programming-and-web-scraping.md @@ -11,7 +11,7 @@ Perl and networking go together like coffee and late-night coding sessions. From ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use IO::Socket::INET; # Simple TCP client @@ -482,7 +482,7 @@ sub scrape_dynamic_site { ```perl package RESTClient; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use LWP::UserAgent; use JSON::XS; use URI::Escape; @@ -675,7 +675,7 @@ sub basename { (split /\//, $_[0])[-1] } ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use LWP::UserAgent; use Digest::MD5 qw(md5_hex); use Time::HiRes qw(time); diff --git a/12-database-operations-with-dbi.md b/12-database-operations-with-dbi.md index 9c84cf2..a3a2514 100644 --- a/12-database-operations-with-dbi.md +++ b/12-database-operations-with-dbi.md @@ -10,7 +10,7 @@ Databases are where your data lives, and Perl's DBI (Database Independent Interf ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use DBI; # Basic connection @@ -421,7 +421,7 @@ sub get_foreign_keys { ```perl package SimpleORM; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -534,7 +534,7 @@ my $active = $users->count({ status => 'active' }); ```perl package ConnectionPool; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Time::HiRes qw(time); sub new { @@ -672,7 +672,7 @@ $pool->release_connection($dbh); ```perl package MigrationRunner; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Basename; sub new { @@ -802,7 +802,7 @@ $migrator->migrate(); ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use DBI; use JSON::XS; use Time::HiRes qw(time sleep); diff --git a/13-configuration-management-and-templating.md b/13-configuration-management-and-templating.md index f16712b..0f3f3fc 100644 --- a/13-configuration-management-and-templating.md +++ b/13-configuration-management-and-templating.md @@ -10,7 +10,7 @@ Configuration and templates are the bridge between your code and the real world. ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Config::Tiny; # Read INI file @@ -152,7 +152,7 @@ sub merge_configs { ```perl package Config::Environment; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -238,7 +238,7 @@ my $timeout = $config->get('app.timeout', 30); ```perl package Config::Validator; -use Modern::Perl '2023'; +use Modern::Perl '2018'; sub new { my ($class) = @_; @@ -531,7 +531,7 @@ my $output = $template->fill_in(HASH => { ```perl package ConfigGenerator; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Template; sub new { @@ -672,7 +672,7 @@ my $service_config = $gen->generate_systemd_service({ ```perl package ReportGenerator; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Template; use Time::Piece; @@ -789,7 +789,7 @@ sub prepare_chart_data { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use YAML::XS qw(LoadFile DumpFile); use Template; use Path::Tiny; diff --git a/14-cpan-the-treasure-trove.md b/14-cpan-the-treasure-trove.md index cb0329e..af75375 100644 --- a/14-cpan-the-treasure-trove.md +++ b/14-cpan-the-treasure-trove.md @@ -10,7 +10,7 @@ The Comprehensive Perl Archive Network (CPAN) is Perl's killer feature. With ove ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # CPAN consists of: # 1. The archive - mirrors worldwide containing modules @@ -452,7 +452,7 @@ $ENV{PAUSE_PASSWORD} = 'your-password'; ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Pre-release checklist sub pre_release_checks { @@ -677,7 +677,7 @@ if ($My::Module::VERSION < 2.00) { ```perl package WebService::Example; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use LWP::UserAgent; use JSON::XS; diff --git a/15-object-oriented-perl.md b/15-object-oriented-perl.md index 285400f..05dd707 100644 --- a/15-object-oriented-perl.md +++ b/15-object-oriented-perl.md @@ -10,7 +10,7 @@ Perl's approach to object-oriented programming is unique: it gives you the tools ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Basic class definition package Point { @@ -659,7 +659,7 @@ $stock->price(150.25); # Stock AAPL changed to 150.25 ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; package TaskQueue::Task { use Moo; diff --git a/16-testing-and-debugging.md b/16-testing-and-debugging.md index 1cca73f..c57e8ae 100644 --- a/16-testing-and-debugging.md +++ b/16-testing-and-debugging.md @@ -604,7 +604,7 @@ jobs: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use TAP::Harness; use File::Find; use Getopt::Long; @@ -655,7 +655,7 @@ exit($aggregator->all_passed() ? 0 : 1); ```perl #!/usr/bin/env perl # t/web_scraper.t -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Test::More; use Test::MockModule; use Test::Deep; diff --git a/17-performance-and-optimization.md b/17-performance-and-optimization.md index 528bea9..fd40c72 100644 --- a/17-performance-and-optimization.md +++ b/17-performance-and-optimization.md @@ -10,7 +10,7 @@ Performance matters when you're processing gigabytes of logs, handling thousands ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Run with profiling: # perl -d:NYTProf script.pl @@ -634,7 +634,7 @@ sub cached_query { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Benchmark qw(cmpthese); # Log parser optimization diff --git a/18-building-command-line-tools.md b/18-building-command-line-tools.md index 30cfc46..da5b4c4 100644 --- a/18-building-command-line-tools.md +++ b/18-building-command-line-tools.md @@ -10,7 +10,7 @@ Command-line tools are Perl's bread and butter. From simple scripts to complex a ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Getopt::Long; use Pod::Usage; @@ -369,7 +369,7 @@ my $db_port = $config->get('database.port', 5432); ```perl #!/usr/bin/env perl package MyApp::CLI; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use Types::Standard qw(Str Int Bool HashRef); use Getopt::Long::Descriptive; @@ -720,7 +720,7 @@ $builder->create_build_script(); ```perl #!/usr/bin/env perl # loganalyzer - Advanced log analysis tool -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Getopt::Long::Descriptive; use Time::Piece; use JSON::XS; diff --git a/19-system-monitoring-and-alerting-scripts.md b/19-system-monitoring-and-alerting-scripts.md index f97bdd3..c749d05 100644 --- a/19-system-monitoring-and-alerting-scripts.md +++ b/19-system-monitoring-and-alerting-scripts.md @@ -10,7 +10,7 @@ System monitoring isn't just about knowing when things break—it's about unders ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Time::HiRes qw(time sleep); package SystemMonitor; @@ -250,7 +250,7 @@ while (1) { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use LWP::UserAgent; use Net::Ping; use DBI; @@ -552,7 +552,7 @@ for my $name (sort keys %$results) { ```perl #!/usr/bin/env perl package AlertManager; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use Email::Simple; use Email::Sender::Simple qw(sendmail); @@ -731,7 +731,7 @@ END ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Tail; use Time::Piece; @@ -949,7 +949,7 @@ $_->join for @threads; ```perl #!/usr/bin/env perl package MonitoringSystem; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use YAML::XS qw(LoadFile); use DBI; diff --git a/20-automation-workflows-and-cron-jobs.md b/20-automation-workflows-and-cron-jobs.md index b3bde7a..52a0de6 100644 --- a/20-automation-workflows-and-cron-jobs.md +++ b/20-automation-workflows-and-cron-jobs.md @@ -33,7 +33,7 @@ Automation is the heart of efficient system administration. Whether it's schedul # Always use absolute paths and set environment package CronJob; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use File::Basename; use Cwd 'abs_path'; @@ -125,7 +125,7 @@ CronJob::run('daily_backup', sub { ```perl #!/usr/bin/env perl package CronManager; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Config::Crontab; sub new { @@ -246,7 +246,7 @@ for my $job (@$jobs) { ```perl #!/usr/bin/env perl package Workflow; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use Types::Standard qw(ArrayRef HashRef CodeRef); @@ -465,7 +465,7 @@ $workflow->execute(); ```perl #!/usr/bin/env perl package TaskScheduler; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use Schedule::Cron; use Parallel::ForkManager; @@ -672,7 +672,7 @@ $scheduler->start(); ```perl #!/usr/bin/env perl package DataPipeline; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Moo; use Parallel::ForkManager; use File::Temp; @@ -903,7 +903,7 @@ say "Pipeline completed: " . encode_json($result); ```perl #!/usr/bin/env perl package DeploymentAutomation; -use Modern::Perl '2023'; +use Modern::Perl '2018'; use YAML::XS qw(LoadFile); use Net::SSH::Perl; use Git::Repository; diff --git a/21-restful-apis-and-web-services.md b/21-restful-apis-and-web-services.md index 9513d2b..462477e 100644 --- a/21-restful-apis-and-web-services.md +++ b/21-restful-apis-and-web-services.md @@ -357,7 +357,7 @@ Now let's build a comprehensive API client that demonstrates best practices: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -833,7 +833,7 @@ While REST dominates, GraphQL offers powerful query capabilities: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -1145,7 +1145,7 @@ Comprehensive testing ensures reliable APIs: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use Test::More; use Test::Mojo; use Test::Deep; diff --git a/22-security-best-practices.md b/22-security-best-practices.md index b1e7256..275ed06 100644 --- a/22-security-best-practices.md +++ b/22-security-best-practices.md @@ -12,7 +12,7 @@ Never trust input. Ever. This is the first commandment of secure programming: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -202,7 +202,7 @@ Never store passwords in plain text. Use proper hashing with salt: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -423,7 +423,7 @@ Always use parameterized queries, never string concatenation: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -590,7 +590,7 @@ Never pass user input directly to system commands: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -774,7 +774,7 @@ Implement proper encryption for sensitive data: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -876,7 +876,7 @@ Validate and sanitize file uploads carefully: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -1031,7 +1031,7 @@ Track security events for forensics and compliance: ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; use feature 'signatures'; no warnings 'experimental::signatures'; @@ -1199,7 +1199,7 @@ package Security::Audit { ```perl #!/usr/bin/env perl -use Modern::Perl '2023'; +use Modern::Perl '2018'; # Security Checklist Module package Security::Checklist { diff --git a/README.md b/README.md index faa2b7c..c4c514d 100644 --- a/README.md +++ b/README.md @@ -26,27 +26,27 @@ This book presents Perl not as a relic of the past, but as a powerful, evolving ## 📖 Table of Contents ### Part I: Foundations -- **[Chapter 1: Why Perl Still Matters in 2025](01-why-perl-still-matters-in-2025.md)** - Perl's unique position in modern computing -- **[Chapter 2: Setting Up Your Perl Environment](02-setting-up-your-perl-environment.md)** - Modern development environment setup -- **[Chapter 3: Perl Fundamentals - Variables, Data Types, and Operations](03-perl-fundamentals-variables-data-types-and-operations.md)** - Core language concepts +- **[Chapter 1: Why Perl Still Matters](01-why-perl-still-matters.md)** - Perl's unique position in modern computing +- **[Chapter 2: Getting Started - Modern Perl Setup](02-getting-started-modern-perl-setup.md)** - Modern development environment setup +- **[Chapter 3: Perl Fundamentals - Variables and Data Types](03-perl-fundamentals-variables-and-data-types.md)** - Core language concepts - **[Chapter 4: Control Flow and Subroutines](04-control-flow-and-subroutines.md)** - Program flow and code organization -- **[Chapter 5: Regular Expressions - Perl's Secret Weapon](05-regular-expressions-perls-secret-weapon.md)** - Mastering pattern matching +- **[Chapter 5: Regular Expressions - Perl's Superpower](05-regular-expressions-perls-superpower.md)** - Mastering pattern matching ### Part II: Working with Data - **[Chapter 6: File I/O and Directory Operations](06-file-io-and-directory-operations.md)** - File system manipulation -- **[Chapter 7: Text Processing and Manipulation](07-text-processing-and-manipulation.md)** - Advanced text operations -- **[Chapter 8: Working with Structured Data Formats](08-working-with-structured-data-formats.md)** - JSON, XML, YAML, and more -- **[Chapter 9: Log Analysis and Data Extraction](09-log-analysis-and-data-extraction.md)** - Mining insights from logs +- **[Chapter 7: Advanced Text Processing](07-advanced-text-processing.md)** - Advanced text operations +- **[Chapter 8: Working with CSV, JSON, XML](08-working-with-csv-json-xml.md)** - JSON, XML, YAML, and more +- **[Chapter 9: Log File Analysis and Monitoring](09-log-file-analysis-and-monitoring.md)** - Mining insights from logs ### Part III: System Programming -- **[Chapter 10: System Administration and Process Management](10-system-administration-and-process-management.md)** - OS interaction and process control +- **[Chapter 10: Process Management and System Commands](10-process-management-and-system-commands.md)** - OS interaction and process control - **[Chapter 11: Network Programming and Web Scraping](11-network-programming-and-web-scraping.md)** - Network protocols and web automation -- **[Chapter 12: Database Programming with DBI](12-database-programming-with-dbi.md)** - Database interaction and management +- **[Chapter 12: Database Operations with DBI](12-database-operations-with-dbi.md)** - Database interaction and management - **[Chapter 13: Configuration Management and Templating](13-configuration-management-and-templating.md)** - Managing system configurations ### Part IV: Modern Perl Development -- **[Chapter 14: CPAN - The Comprehensive Perl Archive Network](14-cpan-the-comprehensive-perl-archive-network.md)** - Leveraging Perl's ecosystem -- **[Chapter 15: Object-Oriented Programming in Modern Perl](15-object-oriented-programming-in-modern-perl.md)** - OOP with Moose and Moo +- **[Chapter 14: CPAN - The Treasure Trove](14-cpan-the-treasure-trove.md)** - Leveraging Perl's ecosystem +- **[Chapter 15: Object-Oriented Perl](15-object-oriented-perl.md)** - OOP with Moose and Moo - **[Chapter 16: Testing and Debugging](16-testing-and-debugging.md)** - Quality assurance practices - **[Chapter 17: Performance and Optimization](17-performance-and-optimization.md)** - Making Perl fast @@ -182,4 +182,4 @@ After reading this book, you will be able to: *"Perl – The Swiss Army Chainsaw of Programming Languages"* -**Start your journey with [Chapter 1: Why Perl Still Matters in 2025](01-why-perl-still-matters-in-2025.md)** \ No newline at end of file +**Start your journey with [Chapter 1: Why Perl Still Matters](01-why-perl-still-matters.md)** \ No newline at end of file