sudo apt-get install libpng-dev #### $ ./1.mai.pl enable1.txt Yay #### #!/usr/bin/perl use strict; use Log::Log4perl qw(:easy); use WWW::Mechanize::Chrome; use Data::Dump; use 5.016; my $mech = WWW::Mechanize::Chrome->new(); my $url = 'https://code.google.com/archive/p/dotnetperls-controls/downloads'; $mech->get($url); print $_->text . "\n" for $mech->find_all_links( text_regex => qr/enable/i ); $mech->follow_link( xpath => '//a[text() = "enable1.txt"]' ); my @words; # check the outcome if ($mech->success) { #print $res->decoded_content; #@words = mech->decoded_content; print "Yay\n"; } else { print "Error: " . $mech->status . "\n"; } if (@words) { print "@words\n"; } sleep 1; #### curl 'https://www.googleapis.com/storage/v1/b/google-code-archive/o/v2%2Fcode.google.com%2Fdotnetperls-controls%2Fproject.json?alt=media&stripTrailingSlashes=false' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Origin: https://code.google.com' -H 'Connection: keep-alive' -H 'Referer: https://code.google.com/archive/p/dotnetperls-controls/downloads' -H 'Cache-Control: max-age=0' -H 'TE: Trailers' #### $ ./2.curl.pl | tail -5 zymotic zymurgies zymurgy zyzzyva zyzzyvas $ cat 2.curl.pl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new( 'send_te' => '0' ); my $r = HTTP::Request->new( 'GET' => 'https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/dotnetperls-controls/enable1.txt', [ 'Connection' => 'keep-alive', 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding' => 'gzip, x-gzip, deflate, x-bzip2, bzip2', 'Accept-Language' => 'en-US,en;q=0.5', 'Host' => 'storage.googleapis.com:443', 'Referer' => 'https://code.google.com/archive/p/dotnetperls-controls/downloads', 'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0', 'Upgrade-Insecure-Requests' => '1', ], ); my $res = $ua->request( $r, ); ### begin Aldebaran-added source my @words; # check the outcome if ($res->is_success) { #print $res->decoded_content; @words = $res->decoded_content; } else { print "Error: " . $res->status_line . "\n"; } if (@words) { print "@words\n"; } __END__ $ #### $ cat /etc/2.log.conf ############################################################################### # Log::Log4perl Conf # ############################################################################### log4perl.rootLogger = DEBUG, LOG1, SCREEN log4perl.appender.SCREEN = Log::Log4perl::Appender::Screen log4perl.appender.SCREEN.stderr = 0 log4perl.appender.SCREEN.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.SCREEN.layout.ConversionPattern = %m %n log4perl.appender.LOG1 = Log::Log4perl::Appender::File log4perl.appender.LOG1.filename = /home/hogan/Documents/hogan/logs/2.log4perl.txt log4perl.appender.LOG1.mode = append log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n $ #### #!/usr/bin/perl use Log::Log4perl; # Initialize Logger my $log_conf = "/etc/2.log.conf"; Log::Log4perl::init($log_conf); my $logger = Log::Log4perl->get_logger(); $logger->info("===== before system call"); system('ls -l qwerty'); if( $? > 0 ) { $logger->error("there was an error: $?"); } $logger->info("===== after system call"); #### else { print "Error: " . $mech->status . "\n"; } #### else { $logger->error("there was an error: $mech->status" . "\n") ; }