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

Greetings Monks,

When using Term::Prompt on cygwin the say statement doesn't terminate with a crlf anymore:

Without Term::Prompt:

$ perl -e 'use Modern::Perl; say "the quick brown fox"; say "jumps ove +r the lazy dog.";' the quick brown fox jumps over the lazy dog.

With Term::Prompt:

$ perl -e 'use Term::Prompt; use Modern::Perl; my $p = prompt( "y", "s +tart?", "", ""); say "the quick brown fox"; say "jumps over the lazy +dog.";' start? (y or n) [default n] the quick brown foxjumps over the lazy dog.

Did I run into a bug or am I missing something important? I know cygwin does special things with crlf...

The say statement is a shortcut for { local $\="\n"; print "some string" } and this code block experiences the same behaviour:

$ perl -e 'use Term::Prompt; my $p = prompt( "y", "start?", "", ""); { + local $\="\n"; print "the quick brown fox"}; { local $\="\n"; print +"jumps over the lazy dog."}' start? (y or n) [default n] the quick brown foxjumps over the lazy dog.

Strange... Can anyone explain? This code below works correctly.

$ perl -e 'use Term::Prompt; my $p = prompt( "y", "start?", "", ""); p +rint "the quick brown fox\n" ; print "jumps over the lazy dog."' start? (y or n) [default n] the quick brown fox jumps over the lazy dog.
--
if ( 1 ) { $postman->ring() for (1..2); }
  • Comment on Term::Prompt breaks say in Modern::Perl because of Term::Readkey (edited, was "Modern::Perl and cygwin")
  • Select or Download Code

Replies are listed 'Best First'.
Re: Modern::Perl and cygwin
by gargle (Chaplain) on Feb 08, 2017 at 19:41 UTC
    *** EDITED: this is wrong, Term::Readkey seems to be the culprit ***

    I logged a bug report for Term::Prompt: #120147

    --
    if ( 1 ) { $postman->ring() for (1..2); }
      It seems Term::Readkey is the culprit. See #120148

      With thanks to hobbs, mst and the others at #perl on irc.perl.org.
      --
      if ( 1 ) { $postman->ring() for (1..2); }

        Hi gargle,

        Thank you for updating us, that doesn't happen often enough :-)

        Thanks,
        -- Hauke D

Re: Modern::Perl and cygwin
by gargle (Chaplain) on Feb 08, 2017 at 16:36 UTC

    it's not just cygwin. On my debian stretch/sid at home I get the following:

    gargle@msi:~$ perl -e 'use Term::Prompt qw/prompt/; use Modern::Perl; +{ my $p = (1==1) ? 0 : prompt( "y", "", "", "") } { local $\="\n"; pr +int "the quick brown fox" } { local $\="\n"; print "jumps over the la +zy dog." };' the quick brown fox jumps over the lazy dog.
    gargle@msi:~$ perl -e 'use Term::Prompt qw/prompt/; use Modern::Perl; +{ my $p = (0==1) ? 0 : prompt( "y", "", "", "") } { local $\="\n"; pr +int "the quick brown fox" } { local $\="\n"; print "jumps over the la +zy dog." };' (y or n) [default n] the quick brown foxjumps over the lazy dog.gargle@msi:~$

    Do other people see the same kind of behaviour?

    Debian runs perl v5.24.1, Term::Prompt 1.04, Modern::Perl 1.20150127

    --
    if ( 1 ) { $postman->ring() for (1..2); }
      I can confirm the save behavior on my Ubuntu server running the same versions of those CPAN modules.
        Try downgrading your Term::Readkey to 2.33 or 2.30.
        cpan JSTOWE/TermReadKey-2.33.tar.gz
        or
        cpanm Term::Readkey@2.33
        should do the trick.
        --
        if ( 1 ) { $postman->ring() for (1..2); }