Skip Menu |
Report information
Id: 43789
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: perlbug [at]

Operating System: Linux
PatchStatus: (no value)
Severity: medium
Perl Version: 5.8.8
Fixed In: 5.13.1

Subject: "in memory" files don't call STORE method when tied
Date: Wed, 11 Jul 2007 02:46:26 -0700
To: perlbug [...]
From: David Ljung Madison <daveMail [...]>
Download (untitled) / with headers
text/plain 4.7k
This is a bug report for perl from, generated with the help of perlbug 1.35 running under perl v5.8.8. ----------------------------------------------------------------- [Please enter your report here] If we open a file handle to an "in memory" file held in a perl scalar, and then tie that scalar, we don't see the STORE method called on writes to the filehandle, though they still work on normal STORE events. Code: #################### { package printHook; sub hook { my $myout; # Redirect EXAMPLE filehandle to the variable. open EXAMPLE,'>',\$myout or die "Can't open EXAMPLE: $!\n"; # And tie the variable to this package tie $myout, "printHook", ""; # Store to the variable directly $myout = "direct store"; print "\$myout is: \"$myout\"\n"; # Store to the variable through the filehandle print EXAMPLE "write to myout variable.."; # We didn't see our STORE method called? print "\$myout is: \"$myout\"\n"; } sub TIESCALAR { my ($pkg) = @_; my $obj = []; bless $obj, $pkg; return $obj; } sub STORE { my ($obj, $val) = @_; print STDERR "Wrote var <- $val\n"; $obj->[0] = $val; return $val; } sub FETCH { return $_[0][0]; } } printHook->hook(); #################### The output is: --- Wrote var <- direct store $myout is: "direct store" $myout is: "write to myout variable.." --- Expected output: --- Wrote var <- direct store $myout is: "direct store" Wrote var <- write to myout variable.. $myout is: "write to myout variable.." --- [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=core severity=medium --- Site configuration information for perl v5.8.8: Configured by Debian Project at Wed Dec 6 23:17:41 UTC 2006. Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=, archname=i486-linux-gnu-thread-multi uname='linux saens #1 smp sat nov 25 13:39:52 est 2006 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define 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='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 4.1.1-20)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/, so=so, useshrplib=true, gnulibc_version='2.3.6' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Locally applied patches: --- @INC for perl v5.8.8: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl /usr/local/lib/perl/5.8.4 /usr/local/share/perl/5.8.4 . --- Environment for perl v5.8.8: HOME=/home/dave LANG=C LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=.:/home/dave/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/local/sbin:/WWW/web/ PERL_BADLANG (unset) SHELL=/usr/bin/tcsh
Now fixed in blead by commit ffe0bb5ab7ece4bcdcb968ad795cd58d265b845b

This service is sponsored and maintained by Best Practical Solutions and runs on infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at