Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<> vs <STDIN> is OS specific #4446

Closed
p5pRT opened this issue Sep 25, 2001 · 12 comments
Closed

<> vs <STDIN> is OS specific #4446

p5pRT opened this issue Sep 25, 2001 · 12 comments

Comments

@p5pRT
Copy link

p5pRT commented Sep 25, 2001

Migrated from rt.perl.org#7747 (status was 'resolved')

Searchable as RT7747$

@p5pRT
Copy link
Author

p5pRT commented Sep 25, 2001

From madison@transmeta.com

I wrote a simple STDIN inline filter that puts a command in
the path of STDIN. It sends STDIN to open2, and then takes the
output of that and dups it back to STDIN.

When I then read from <> (as opposed to <STDIN>), I get nothing
on a linux box (tested with 5.005, 5.004, 5.6.0 and 5.6.1), but
it works fine on other OS (at least Solaris).

--------------------------------------------------
use IO​::File;
use IPC​::Open2;
sub stdin_filter {
  my ($cmd) = @​_;
  $pid=open2(\*TMPIN,'<&STDIN',$cmd);
  die("Couldn't fork $!") if $pid == -1;
  open(STDIN,"<&TMPIN"); # Dup back to STDIN
}

stdin_filter("sort");
#while(<STDIN>) { print "new $_"; } # Works everywhere
while(<>) { print "new $_"; } # Works if !linux
--------------------------------------------------

Perl Info


Site configuration information for perl 5.00503:

Configured by root at Mon Aug 30 23:08:56 EDT 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=linux, osvers=2.2.5-22smp, archname=i386-linux
    uname='linux porky.devel.redhat.com 2.2.5-22smp #1 smp wed jun 2 09:11:51 edt 1999 i686 unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O2', gccversion=egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
    cppflags='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lposix -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    


@INC for perl 5.00503:
    /usr/lib/perl5/5.00503/i386-linux
    /usr/lib/perl5/5.00503
    /usr/lib/perl5/site_perl/5.005/i386-linux
    /usr/lib/perl5/site_perl/5.005
    .


Environment for perl 5.00503:
    HOME=/home/madison
    LANG (unset)
    LANGUAGE (unset)
    LC_ALL=C
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=.:/home/madison/bin/i386-linux-libc6:/home/madison/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/openwin/bin:/usr/sbin:/sbin:/usr/local/sbin:/proj/hw/bin:/proj/hw/bin/i386-linux-libc6:/cad/scripts:/usr/local/contrib/bin:.:/proj/sw/astro/tools/i386-linux-libc6/bin
    PERL_BADLANG (unset)
    SHELL=/bin/tcsh

@p5pRT
Copy link
Author

p5pRT commented Sep 28, 2001

From The RT System itself

testpl


open FOO,"<&STDIN" || die "can't open <&STDIN​: $!\n";
print "FOO=".fileno(FOO)."\n";
close STDIN || die "can't close STDIN​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open STDIN,"<&FOO" || die "can't open <&FOO​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open(BOB,"-") || die "can't open -​: $!\n";
print "BOB=".fileno(BOB)."\n";

run as 'perl testpl <bob'

solaris​:


FOO=3
STDIN=
STDIN=0
BOB=0

linux​:


FOO=3
STDIN=
STDIN=0
BOB=-1

2 similar comments
@p5pRT
Copy link
Author

p5pRT commented Sep 28, 2001

From The RT System itself

testpl


open FOO,"<&STDIN" || die "can't open <&STDIN​: $!\n";
print "FOO=".fileno(FOO)."\n";
close STDIN || die "can't close STDIN​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open STDIN,"<&FOO" || die "can't open <&FOO​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open(BOB,"-") || die "can't open -​: $!\n";
print "BOB=".fileno(BOB)."\n";

run as 'perl testpl <bob'

solaris​:


FOO=3
STDIN=
STDIN=0
BOB=0

linux​:


FOO=3
STDIN=
STDIN=0
BOB=-1

@p5pRT
Copy link
Author

p5pRT commented Sep 28, 2001

From The RT System itself

testpl


open FOO,"<&STDIN" || die "can't open <&STDIN​: $!\n";
print "FOO=".fileno(FOO)."\n";
close STDIN || die "can't close STDIN​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open STDIN,"<&FOO" || die "can't open <&FOO​: $!\n";
print "STDIN=".fileno(STDIN)."\n";
open(BOB,"-") || die "can't open -​: $!\n";
print "BOB=".fileno(BOB)."\n";

run as 'perl testpl <bob'

solaris​:


FOO=3
STDIN=
STDIN=0
BOB=0

linux​:


FOO=3
STDIN=
STDIN=0
BOB=-1

@p5pRT
Copy link
Author

p5pRT commented Nov 28, 2003

From The RT System itself

test message from the perlbugtron

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2011

From @jkeenan

I wrote a simple STDIN inline filter that puts a command in
the path of STDIN. It sends STDIN to open2, and then takes the
output of that and dups it back to STDIN.

When I then read from <> (as opposed to <STDIN>), I get nothing
on a linux box (tested with 5.005, 5.004, 5.6.0 and 5.6.1), but
it works fine on other OS (at least Solaris).

I ran the attached program, commenting out first one 'while' loop and
then the other, on both Darwin and Linux, with Perl 5.14. In all cases,
the program simply hung; none of the 'print' statements ever materialized.

So either I misunderstood what I was supposed to be doing, or the
program still does not work. Should it have?

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2011

From @jkeenan

7747.pl

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2011

From @sciurius

"James E Keenan via RT" <perlbug-followup@​perl.org> writes​:

I ran the attached program, commenting out first one 'while' loop and
then the other, on both Darwin and Linux, with Perl 5.14. In all cases,
the program simply hung; none of the 'print' statements ever materialized.

It works here as expected (both 'while' variants).

Perl 5.12 and 5.14 on Fedora 14.

-- Johan

@p5pRT
Copy link
Author

p5pRT commented Apr 28, 2012

From @Hugmeir

On Tue Nov 22 23​:39​:13 2011, jv wrote​:

"James E Keenan via RT" <perlbug-followup@​perl.org> writes​:

I ran the attached program, commenting out first one 'while' loop and
then the other, on both Darwin and Linux, with Perl 5.14. In all cases,
the program simply hung; none of the 'print' statements ever
materialized.

It works here as expected (both 'while' variants).

Perl 5.12 and 5.14 on Fedora 14.

-- Johan

Also working as expected here, Ubuntu 11.10 & Solaris 10. I vote to
close this.

@p5pRT
Copy link
Author

p5pRT commented Apr 28, 2012

From @cpansprout

On Sat Apr 28 00​:08​:01 2012, Hugmeir wrote​:

On Tue Nov 22 23​:39​:13 2011, jv wrote​:

"James E Keenan via RT" <perlbug-followup@​perl.org> writes​:

I ran the attached program, commenting out first one 'while' loop and
then the other, on both Darwin and Linux, with Perl 5.14. In all
cases,
the program simply hung; none of the 'print' statements ever
materialized.

It works here as expected (both 'while' variants).

Perl 5.12 and 5.14 on Fedora 14.

-- Johan

Also working as expected here, Ubuntu 11.10 & Solaris 10. I vote to
close this.

Do we mark this as stalled, as no one can reproduce it, or resolved,
since later versions work and we assume something was fixed? (I’m
following the latter.)

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Apr 28, 2012

@cpansprout - Status changed from 'open' to 'resolved'

@p5pRT p5pRT closed this as completed Apr 28, 2012
@p5pRT
Copy link
Author

p5pRT commented Apr 28, 2012

From @rjbs

* Father Chrysostomos via RT <perlbug-followup@​perl.org> [2012-04-28T03​:29​:25]

Do we mark this as stalled, as no one can reproduce it, or resolved,
since later versions work and we assume something was fixed? (I’m
following the latter.)

For the record​: resolved. "stalled" is "this is definitely a bug we want to
work on but we can't make progress until _____"

--
rjbs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant