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

open(FILEHANDLE, "<&=$fd") + dupping in memory files #9226

Open
p5pRT opened this issue Feb 12, 2008 · 3 comments
Open

open(FILEHANDLE, "<&=$fd") + dupping in memory files #9226

p5pRT opened this issue Feb 12, 2008 · 3 comments

Comments

@p5pRT
Copy link

p5pRT commented Feb 12, 2008

Migrated from rt.perl.org#50756 (status was 'open')

Searchable as RT50756$

@p5pRT
Copy link
Author

p5pRT commented Feb 12, 2008

From @KES777

Created by Eugen.Konkov@aldec.com

Perl Info

Flags:
    category=core
    severity=high

Site configuration information for perl v5.8.8:

Configured by SYSTEM at Tue Jan 23 15:57:26 2007.

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
    optimize='-MD -Zi -DNDEBUG -O1',
    cppflags='-DWIN32'
    ccversion='12.00.8804', gccversion='', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf  -libpath:"C:\Perl\lib\CORE"  -machine:x86'
    libpth=\lib
    libs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib msvcrt.lib
    perllibs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib msvcrt.lib
    libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf  -libpath:"C:\Perl\lib\CORE"  -machine:x86'

Locally applied patches:
    ACTIVEPERL_LOCAL_PATCHES_ENTRY
    Iin_load_module moved for compatibility with build 806
    Avoid signal flag SA_RESTART for older versions of HP-UX
    PerlEx support in CGI::Carp
    Less verbose ExtUtils::Install and Pod::Find
    Patch for CAN-2005-0448 from Debian with modifications
    Rearrange @INC so that 'site' is searched before 'perl'
    Partly reverted 24733 to preserve binary compatibility
    29930 win32.c typo in #define MULTIPLICITY
    29868 win32_async_check() can still loop indefinitely
    29690,29732 ANSIfy the PATH environment variable on Windows
    29689 Add error handling to win32_ansipath
    29675 Use short pathnames in $^X and @INC
    29607,29676 allow blib.pm to be used for testing Win32 module
    29605 Implement killpg() for MSWin32
    29598 cwd() to return the short pathname
    29597 let readdir() return the alternate filename
    29590 Don't destroy the Unicode system environment on Perl startup
    29528 get ext/Win32/Win32.xs to compile on cygwin
    29509,29510,29511 Move Win32::* functions into Win32 module
    29483 Move Win32 from win32/ext/Win32 to ext/Win32
    29481 Makefile.PL changes to compile Win32.xs using cygwin
    28671 Define PERL_NO_DEV_RANDOM on Windows
    28376 Add error checks after execing PL_cshname or PL_sh_path
    28305 Pod::Html should not convert \"foo\" into ``foo''
    27833 Change anchor generation in Pod::Html for '=item item 2'
    27832,27847 fix Pod::Html::depod() for multi-line strings
    27736 Make perl_fini() run with Sun WorkShop compiler
    27719 Document the functions htmlify() and anchorify() in Pod::Html
    27619 Bug in Term::ReadKey being triggered by a bug in Term::ReadLine
    27549 Move DynaLoader.o into libperl.so
    27528 win32_pclose() error exit doesn't unlock mutex
    27527 win32_async_check() can loop indefinitely
    27515 ignore directories when searching @INC
    27359 Fix -d:Foo=bar syntax
    27210 Fix quote typo in c2ph
    27203 Allow compiling swigged C++ code
    27200 Make stat() on Windows handle trailing slashes correctly
    27194 Get perl_fini() running on HP-UX again
    27133 Initialise lastparen in the regexp structure
    27061 L<PerlIO> and Pod::Html
    27034 Avoid \"Prototype mismatch\" warnings with autouse
    26970 Make Passive mode the default for Net::FTP
    26921 Avoid getprotobyname/number calls in IO::Socket::INET
    26897,26903 Make common IPPROTO_* constants always available
    26670 Make '-s' on the shebang line parse -foo=bar switches
    26637 Make Borland and MinGW happy with change 26379
    26536 INSTALLSCRIPT versus INSTALLDIRS
    26379 Fix alarm() for Windows 2003
    26087 Storable 0.1 compatibility
    25861 IO::File performace issue
    25084 long groups entry could cause memory exhaustion
    24699 ICMP_UNREACHABLE handling in Net::Ping


@INC for perl v5.8.8:
    C:/Perl/site/lib
    C:/Perl/lib
    .


Environment for perl v5.8.8:
    HOME (unset)
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=C:\Perl\site\bin;C:\Perl\bin;C:\cygwin\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Xoreax\IncrediBuild;C:\Program Files\Subversion\bin;C:\Program Files\Graphviz2.16\Bin;C:\Program Files\doxygen\bin
    PERL_BADLANG (unset)
    SHELL (unset)

@p5pRT
Copy link
Author

p5pRT commented Jun 29, 2008

From p5p@spam.wizbit.be

On Tue Feb 12 08​:49​:02 2008, KES wrote​:

This is a bug report for perl from Eugen.Konkov@​aldec.com,
generated with the help of perlbug 1.35 running under perl v5.8.8.

open my $ff, "&gt;&amp;", STDOUT or die "1​: $!";
open FH, ">&", $ff or die "2​: $!";
open F2, ">&", FH or die "3​: $!";
print F2 'hello';

This code outputs 'hello' to STDOUT;
but on WWW​: http​://perldoc.perl.org/functions/open.html
was wrote that I can use $ff

# open for input, reusing the fileno of $fd
open(FILEHANDLE, "<&=$fd")
or
open(FILEHANDLE, "<&=", $fd)
I have tried to change my code to next​:

open my $ff, "&gt;&amp;", STDOUT or die "1​: $!";
open FH, ">&$ff" or die "2​: $!";
open F2, ">&", FH or die "3​: $!";
print F2 'hello';

and it DIED with message "2​: Invalid argument at ..."

This appears to be a documentation bug...

open my $ff, "&gt;&amp;", STDOUT or die "1​: $!";
open FH, ">&$ff" or die "2​: $!";

does not work, but​:

open my $ff, "&gt;&amp;", STDOUT or die "1​: $!";
my $fd = fileno($ff);
open FH, ">&$fd" or die "2​: $!";

and so does​:

open FH, ">&", $ff or die "2​: $!";

2. Furthermore help does not explain situations when redirecting one
"in momory" file to an other
my $mem1;
open F1, ">", \$mem1;
my $mem2;
open F2, ">", \$mem2;
print $mem1 'AAA';
print $mem2 'BBB';

open F1, ">&", F2;
print F1 'aaa';
print F2 'bbb';

print $mem1;
print $mem2;
exit 0;

Expected results​: AAABBBaaabbb
Actual results​: AAABBBbbb

I'm assuming you made an error copying the code since the code supplied
won't work. (print $mem1 'AAA';)

#!/usr/bin/perl

my $mem1;
open F1, ">", \$mem1;
my $mem2;
open F2, ">", \$mem2;
print F1 'AAA';
print F2 'BBB';

open F1, ">&", F2;
print F1 'aaa';
print F2 'bbb';

print "$mem1\n";
print "$mem2\n";

__END__

Output​:
AAA
BBBbbb

Chaning it to open F1, ">&=", F2;

#!/usr/bin/perl

my $mem1;
open F1, ">", \$mem1;
my $mem2;
open F2, ">", \$mem2;
print F1 'AAA';
print F2 'BBB';

open F1, ">&=", F2;
print F1 'aaa';
print F2 'bbb';

print "$mem1\n";
print "$mem2\n";

__END__

Output​:
AAA
BBBaaa

@p5pRT
Copy link
Author

p5pRT commented Jun 29, 2008

The RT System itself - Status changed from 'new' to 'open'

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