in reply to Input problem with Enter key...
in thread Input problem with Enter key...

I changed what you indicated and dropped the parenthisis. But when i "run" the script, it still moves to the next line and waits for more input until i hit ^c to exith the interpeter, to which it prints the "input" when exiting. Do i need to change a $| or something, it still is doing the same thing.

print "Something: "; my $Input = <STDIN>; print "You Typed ", $Input;

I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...

Replies are listed 'Best First'.
Input problem with Enter key...
by davido (Cardinal) on Nov 07, 2016 at 02:00 UTC

    Does your program contain any lines that manipulate the special variable, $/?

    use strict; use warnings; $/ = undef; print "Say something: " my $Input = <STDIN>; print "You typed $Input\n';

    It sounds like either your script, or a module your script uses has altered $/. At least that's the first thing that jumps to mind for me. There are probably other ways to arrive at that type of behavior, but that's one of the easiest ones to arrive at.

    By the way, a better way to gather user input may be found buried in the core Perl module, ExtUtils::MakeMaker:

    use ExtUtils::MakeMaker q(prompt); my $input = prompt('Say something: '); print "You typed $input\n";

    prompt() allows you to set a default value, and uses that default if the user hits enter without typing anything, or if it detects a non-interactive environment.


    Dave

      *heh* actually, those are the only lines in the script that i posted... do i need to add a
      $/=undef;
      or
      $/=chr(13);
      or
      $/="\n";
      ?

      I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...
Input problem with Enter key...
by kcott (Archbishop) on Nov 07, 2016 at 02:02 UTC

    I am unable to (and, frankly, didn't expect to be able to) reproduce your problem in isolation. I tried this:

    $ perl -e 'print "X: "; my $x = <STDIN>; print "X=", $x'

    Regardless, of whether I terminate the input with <Enter>, Ctrl-J (newline) or Ctrl-M (carriage return), it works fine:

    $ perl -e 'print "X: "; my $x = <STDIN>; print "X=", $x' X: 123 X=123 $

    Adding '$|=0;' or '$|=1;', as the first statement, makes no difference: I get the same result as above (regardless of how I terminate the input).

    Try what I did and see how you go. If it works OK, then there's probably something else in your code causing the problem; if it's still not working, look for issues with whatever shell you're running, non-standard keymapping, hardware problems (perhaps try starting a new shell or even rebooting).

    — Ken

      i don't imagine it has anything to do with the fact i'm using strawberry on xp?

      I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...
        I sincerely doubt that XP or Strawberry has anything to do with this! This very simple program should work on any version of Perl and on any platform!
        use warnings; use strict; print "type something: "; my $input = <STDIN>; print "you typed", $input; # of course: # print "you typed $input"; # would be the same
        I don't know if you are using some kind of development environment to run the code or not? Save this .pl file verbatim and run it from the Windows XP command line - not from within any development environment.

        Before posting, I tested this on Win XP to avoid a typo problem. I am using an Active State build, but that shouldn't matter in the slightest.

        Only if you're trying to run this as a one liner, which is contrary to what you said in the OP.

        If, however, a one liner is at work, MSWin (of any flavor) will hate your quoting. Oversimplifying just a bit, Windows demands double quoting the entire "script" and use of escaping or one of the quote-like (q/single quoted text/ [no interpolation] or qq/double quoted text/ [interpolates]) alternatives in the spots where a script would use double-quotes.


        check Ln42!