* bug#19643: 24.2; shell mode
@ 2015-01-21 0:12 twilliam
2015-01-21 4:15 ` Alexis
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: twilliam @ 2015-01-21 0:12 UTC (permalink / raw)
To: 19643
I'm trying to use shell mode. In fact, I'm trying to run a Perl
program in shell mode. I launch the program, and it runs. Input from
a file is read, processed. Output (to STDOUT) is printed to *shell*.
Trouble is I can't read keyboard input (as in <STDIN>). What am I
missing (except a brain)?
Ok, this is Emacs 24.2.1 running on Windows XP.
I downloaded Perl from ActiveState in 2011. Here's a simple Perl
program that demos the problem:
print "Give me a number: ";
chomp ( $Anumber = <STDIN> );
print "Give me another: ";
chomp ( $Bnumber = <STDIN> );
$product = $Anumber * $Bnumber;
print "$Anumber times $Bnumber = $product\n";
It works fine in a DOS window. In emacs shell mode it tells me this
Use of uninitialized value $Anumber in chomp at c:\Perl\ex2-4.pl line 3.
Use of uninitialized value $Bnumber in chomp at c:\Perl\ex2-4.pl line 5.
Use of uninitialized value $Bnumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
Use of uninitialized value $Anumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
Use of uninitialized value $Anumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
Use of uninitialized value $Bnumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
Give me a number: Give me another: times = 0
Perl is complaining about uninitialized values before it has even
printed the prompts for them.
In GNU Emacs 24.2.1 (i386-mingw-nt5.1.2600)
of 2012-08-28 on MARVIN
Windowing system distributor `Microsoft Corp.', version 5.1.2600
Configured using:
`configure --with-gcc (4.6) --cflags
-ID:/devel/emacs/libs/libXpm-3.5.8/include
-ID:/devel/emacs/libs/libXpm-3.5.8/src
-ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include
-ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include
-ID:/devel/emacs/libs/giflib-4.1.4-1/include
-ID:/devel/emacs/libs/jpeg-6b-4/include
-ID:/devel/emacs/libs/tiff-3.8.2-1/include
-ID:/devel/emacs/libs/gnutls-3.0.9/include'
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: ENU
value of $XMODIFIERS: nil
locale-coding-system: cp1252
default enable-multibyte-characters: t
Major mode: Lisp Interaction
Minor modes in effect:
shell-dirtrack-mode: t
tooltip-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1> <mouse-1>
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo>
<menu-bar> <buffer> C-e <help-echo> <help-echo> <help-echo>
<help-echo> <help-echo> <down-mouse-1> <mouse-movement>
<mouse-1> <help-echo> <help-echo> <help-echo> <help-echo>
<switch-frame> <help-echo> <help-echo> <switch-frame>
M-x r e p o r t - e m a c s - b u g <return>
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Mark set
Use of uninitialized value $Anumber in chomp at c:\Perl\ex2-4.pl line 3.
Use of uninitialized value $Bnumber in chomp at c:\Perl\ex2-4.pl line 5.
Use of uninitialized value $Bnumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
Use of uninitialized value $Anumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
Use of uninitialized value $Anumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
Use of uninitialized value $Bnumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
Give me a number: Give me another: times = 0
Load-path shadows:
None found.
Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
easymenu mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils goto-addr thingatpt view shell pcomplete
comint regexp-opt ansi-color ring perl-mode time-date tooltip ediff-hook
vc-hooks lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win
w32-vars tool-bar dnd fontset image fringe lisp-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs
button faces cus-face files text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process multi-tty emacs)
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#19643: 24.2; shell mode
2015-01-21 0:12 bug#19643: 24.2; shell mode twilliam
@ 2015-01-21 4:15 ` Alexis
2015-01-21 15:49 ` Eli Zaretskii
2015-01-24 16:45 ` bug#19643: Emacs shell mode problem twilliam
2 siblings, 0 replies; 5+ messages in thread
From: Alexis @ 2015-01-21 4:15 UTC (permalink / raw)
To: 19643
twilliam@twilliam.org writes:
> I'm trying to use shell mode. In fact, I'm trying to run a Perl
> program in shell mode. I launch the program, and it runs. Input from
> a file is read, processed. Output (to STDOUT) is printed to *shell*.
> Trouble is I can't read keyboard input (as in <STDIN>). What am I
> missing (except a brain)?
>
> Ok, this is Emacs 24.2.1 running on Windows XP.
>
> I downloaded Perl from ActiveState in 2011. Here's a simple Perl
> program that demos the problem:
>
> print "Give me a number: ";
> chomp ( $Anumber = <STDIN> );
> print "Give me another: ";
> chomp ( $Bnumber = <STDIN> );
> $product = $Anumber * $Bnumber;
> print "$Anumber times $Bnumber = $product\n";
>
> It works fine in a DOS window. In emacs shell mode it tells me this
>
> Use of uninitialized value $Anumber in chomp at c:\Perl\ex2-4.pl line 3.
> Use of uninitialized value $Bnumber in chomp at c:\Perl\ex2-4.pl line 5.
> Use of uninitialized value $Bnumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
> Use of uninitialized value $Anumber in multiplication (*) at c:\Perl\ex2-4.pl line 6.
> Use of uninitialized value $Anumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
> Use of uninitialized value $Bnumber in concatenation (.) or string at c:\Perl\ex2-4.pl line 7.
> Give me a number: Give me another: times = 0
>
> Perl is complaining about uninitialized values before it has even
> printed the prompts for them.
Off the top of my head, my guess is that, when run from shell-mode, Perl
is being called with the `-w` switch (which gives one warnings about
certain constructs that might indicate programmer error), whereas you're
not calling your script with the `-w` switch when calling it from the
DOS window. See the `perlrun` man page for info about `-w`.
So, do you get the above messages when you run your script from a DOS
window with warnings enabled, e.g.:
perl -w myscript.pl
?
Alexis.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#19643: 24.2; shell mode
2015-01-21 0:12 bug#19643: 24.2; shell mode twilliam
2015-01-21 4:15 ` Alexis
@ 2015-01-21 15:49 ` Eli Zaretskii
2015-01-24 16:45 ` bug#19643: Emacs shell mode problem twilliam
2 siblings, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2015-01-21 15:49 UTC (permalink / raw)
To: twilliam; +Cc: 19643
> From: twilliam@twilliam.org
> Date: Tue, 20 Jan 2015 17:12:31 -0700
>
> I'm trying to use shell mode. In fact, I'm trying to run a Perl
> program in shell mode. I launch the program, and it runs. Input from
> a file is read, processed. Output (to STDOUT) is printed to *shell*.
> Trouble is I can't read keyboard input (as in <STDIN>). What am I
> missing (except a brain)?
>
> Ok, this is Emacs 24.2.1 running on Windows XP.
>
> I downloaded Perl from ActiveState in 2011. Here's a simple Perl
> program that demos the problem:
>
> print "Give me a number: ";
> chomp ( $Anumber = <STDIN> );
> print "Give me another: ";
> chomp ( $Bnumber = <STDIN> );
> $product = $Anumber * $Bnumber;
> print "$Anumber times $Bnumber = $product\n";
>
> It works fine in a DOS window. In emacs shell mode it tells me this
>
> Use of uninitialized value $Anumber in chomp at c:\Perl\ex2-4.pl line 3.
> Use of uninitialized value $Bnumber in chomp at c:\Perl\ex2-4.pl line 5.
> Use of uninitialized value $Bnumber in multiplication (*) at c:\Perl\ex2-4.pl
> line 6.
> Use of uninitialized value $Anumber in multiplication (*) at c:\Perl\ex2-4.pl
> line 6.
> Use of uninitialized value $Anumber in concatenation (.) or string at
> c:\Perl\ex2-4.pl line 7.
> Use of uninitialized value $Bnumber in concatenation (.) or string at
> c:\Perl\ex2-4.pl line 7.
> Give me a number: Give me another: times = 0
>
> Perl is complaining about uninitialized values before it has even
> printed the prompts for them.
It's a buffering issue. On Windows, sub-processes are run via pipes,
and Perl evidently fully buffers its stdout when it's connected to a
pipe (as opposed to a console, where it is line-buffered, and is also
flushed when your script reads from STDIN). There's nothing Emacs can
do about this, because the decision about the buffering mode is made
by the Perl interpreter.
Some interpreters, like Python, have a command-line switch to turn off
buffering, but Perl doesn't (AFAIK). So you need to do that from your
Perl scripts.
My Perl is exceedingly rudimentary, but I found the solution here:
http://perl.plover.com/FAQs/Buffering.html
http://www.perlmonks.org/?node_id=280025
The solution is to add this single line at the beginning of your Perl
script:
$|++;
This causes STDOUT to auto-flush after each output.
(There's also an alternative that needs to use the FileHandle module,
see the first URL above.)
Bottom line: I don't think this is an Emacs problem.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#19643: Emacs shell mode problem
2015-01-21 0:12 bug#19643: 24.2; shell mode twilliam
2015-01-21 4:15 ` Alexis
2015-01-21 15:49 ` Eli Zaretskii
@ 2015-01-24 16:45 ` twilliam
2015-01-25 16:20 ` Eli Zaretskii
2 siblings, 1 reply; 5+ messages in thread
From: twilliam @ 2015-01-24 16:45 UTC (permalink / raw)
To: 19643
[-- Attachment #1: Type: text/html, Size: 1812 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#19643: Emacs shell mode problem
2015-01-24 16:45 ` bug#19643: Emacs shell mode problem twilliam
@ 2015-01-25 16:20 ` Eli Zaretskii
0 siblings, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2015-01-25 16:20 UTC (permalink / raw)
To: twilliam; +Cc: 19643
> From: <twilliam@twilliam.org>
> Date: Sat, 24 Jan 2015 09:45:03 -0700
>
> Here is a simple one called oneline.pl:
>
> use 5.012;
> use strict;
> #$|=1;
>
> my $line = <STDIN>;
> print "\$line = $line\n";
>
> In a DOS window it runs like this:
>
> C:\Perl>oneline.pl
> 1234
> $line = 1234
>
> C:\Perl>
>
> Note in DOS I type in the line 1234, and the program prints "$line = 1234".
>
> In Emacs shell mode it runs like this:
>
> c:\Perl>oneline.pl
> oneline.pl
> $line =
>
> c:\Perl>
>
> In Emacs the program doesn't pause to wait for a keyboard input. It blows right
> through it and then prints "$line = ".
I see this on Windows XP, but not on Windows 7.
So it's clearly some subtlety of how Windows buffers pipes and reads
from stdin. Unless someone has more insight, I don't see what we can
do with this problem.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-01-25 16:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-21 0:12 bug#19643: 24.2; shell mode twilliam
2015-01-21 4:15 ` Alexis
2015-01-21 15:49 ` Eli Zaretskii
2015-01-24 16:45 ` bug#19643: Emacs shell mode problem twilliam
2015-01-25 16:20 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).