http://qs321.pair.com?node_id=11110504

Aldebaran has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks,

I'm trying to juggle my perl development issues with the 3 platforms I use: windows 10, linux, and termux on android. Each has its challenges. The one that has ground me to a halt right now is on my windows machine. When I select cpan from the strawberry perl entries in the startup menu, I get:

Loading internal logger. Log::Log4perl recommended for better logging Unable to get Terminal Size. The Win32 GetConsoleScreenBufferInfo call + didn't work. The COLUMNS and LINES environment variables didn't work +. at C:\Strawberry\perl\vendor\lib/Term/ReadLine/readline.pm line 410 +. There seems to be running another CPAN process (pid 3728). Contacting +... Other job not responding. Shall I overwrite the lockfile 'C:\STRAWB~1\ +cpan\.lock'? (Y/n) [y] y cpan shell -- CPAN exploration and modules installation (v2.26) Enter 'h' for help. cpan>

I don't know why I'm being prompted about the lockfile, as I don't think there is an antecedent cpan process running, but then I also don't believe STDOUT is lying to me. When I try to install Log::Log4perl , I get:

t/026FileApp.t ............ 1/27 # Failed test 'header_text' # at t/026FileApp.t line 459. # got: 'This is a nice header. # This is a nice header. # DEBUG - waah! # ' # expected: 'This is a nice header. # DEBUG - waah! # ' # Looks like you failed 1 test of 27. t/026FileApp.t ............ Dubious, test returned 1 (wstat 256, 0x100 +)

When I further investigate the original cpan error in the given location of readline.pm, I find:

sub get_window_size { my $sig = shift; local($., $@, $!, $^E, $?); # Preserve $! etc; the rest for + hooks my ($num_cols,$num_rows); if (defined $term_readkey) {

Although the line number is 410, this seems to be some of first executable code, so it looks like this fails quickly.

Not being able to install this module is stopping me from being able to install WWW::Mechanize::Chrome, which has it as a prerequisite. Also, I just installed Excel::Writer::XLSX using the same toolchain to prove that I have write privileges.

Anyways, fishing for tips and tricks,

Replies are listed 'Best First'.
Re: getting Log::Log4perl to install on windows strawberry perl
by trwww (Priest) on Dec 22, 2019 at 14:20 UTC

    Its been logged in the CPAN RT: https://rt.cpan.org/Public/Bug/Display.html?id=120926#txn-1717278

    I was going to summarize the issue but I just read through the ticket again and I'm not sure I understand it yet, so I'll leave you to parse it. A non technical summary is it looks like Log::Log4perl lost its maintainer.

    I'm guessing we need a couple utilities at the perl infrastructure level: One to "fork" a cpan dist in to github (for dists that aren't on github, but L4P already is), and then an update to cpan/cpanm to get it to prefer where to get a specific dist from.

      "I'm guessing we need a couple utilities at the perl infrastructure level: One to "fork" a cpan dist in to github (for dists that aren't on github, but L4P already is), and then an update to cpan/cpanm to get it to prefer where to get a specific dist from."

      First, create the repository on your Github. I created one called simply "log4perl", then:

      cpan -g Log::Log4perl tar -xzvf Log-Log4perl-1.49.tar.gz cd Log-Log4perl-1.49 git init git add . git remote add origin https://stevieb9@github.com/stevieb9/log4perl.gi +t git push -u origin master

      Now you've make a fork of the 1.49 version of the distribution on your own Github.

      Now, when you want to install with cpanm:

      cd c:\users\steveb\repos git clone https://github.com/stevieb9/log4perl cd log4perl cpanm .

      Or, do a make dist in your repository, add the newly created tarball into the repo and do a push, then:

      cpanm https://github.com/stevieb9/log4perl/blob/master/Log4Perl-1.53.t +ar.gz
        First, create the repository on your Github.

        Actually, the thing I needed to do first was to create a repos directory on my local machine, and then within it run:

        cpan -g Log::Log4perl tar -xzvf Log-Log4perl-1.49.tar.gz cd Log-Log4perl-1.49 git init git add . git remote add origin https://github.com/TBlazer66/log4perl.git git push -u origin master cpanm . --force

        Test script:

        C:\Users\tblaz\Documents\evelyn>perl 1.perl_log.pl C:\Users\tblaz\Documents\evelyn>type test.log 2019/12/24 22:25:14 Debug this! 2019/12/24 22:25:14 Info this! 2019/12/24 22:25:14 Warn this! 2019/12/24 22:25:14 Error this! 2019/12/24 22:25:14 Fatal this! C:\Users\tblaz\Documents\evelyn>type 1.perl_log.pl #!/usr/bin/perl -w use 5.016; use Log::Log4perl qw(:easy); Log::Log4perl->easy_init( { level => $DEBUG, file => ">>test.log" } ); # Logs to test.log via stealth logger DEBUG("Debug this!"); INFO("Info this!"); WARN("Warn this!"); ERROR("Error this!"); some_function(); sub some_function { # Same here FATAL("Fatal this!"); } C:\Users\tblaz\Documents\evelyn>

        I was very happy to see such quality responses to my question. Thank you. Perl is such a good activity for Xmas eve.

Re: getting Log::Log4perl to install on windows strawberry perl
by ateague (Monk) on Dec 23, 2019 at 14:41 UTC

    As a side note, you can also apply a patch to the test:

    @@ -448,6 +448,7 @@ log4perl.appender.Logfile.header_text = This is a nice header. log4perl.appender.Logfile.syswrite = 1 log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayou +t +log4perl.appender.Logfile.mode = clobber ); Log::Log4perl->init(\$data);
      As a side note, you can also apply a patch to the test:

      Can you elaborate as to how this is done?

      C:\Users\tblaz\Documents\evelyn>type 1.patch.pl #!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11108769 use warnings; @@ -448,6 +448,7 @@ log4perl.appender.Logfile.header_text = This is a nice header. log4perl.appender.Logfile.syswrite = 1 log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayou +t +log4perl.appender.Logfile.mode = clobber ); Log::Log4perl->init(\$data); C:\Users\tblaz\Documents\evelyn>

        The file isn't a Perl script, it's basically a unified diff that is commonly fed into the patch program (originally written by Larry Wall) to apply the patches automatically. Typically, the filename is included in the diff output, so in this case I don't think patch can handle this format, but this patch is simple enough: it's telling you to insert the line "log4perl.appender.Logfile.mode = clobber" after the line "log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayout" (as indicated at the top, look at line number 448), and we can infer from the context in this thread that it's referring to t/026FileApp.t in the Log::Log4perl distro.

Re: getting Log::Log4perl to install on windows strawberry perl (use the force luke)
by Anonymous Monk on Dec 22, 2019 at 08:13 UTC

    Not being able to install this module is stopping me from being

    :) Use the force luke <hint> cpanm --notest Log::Log4perl </hint>

    Update 2 Jan 20, footpad: Updated HTML tags to modern use, per Consideration.

      Thank you, Obi-Wan!