Jonathan Field wrote: > Hi all, > > This is my first mod_perl bug report, so I'd like to start by thanking you > all for your great work over the years. > > The problem I am experiencing involves passing a scalar reference (instead > of a scalar) to $r->print(). It usually works as documented. However I > have come across a situation where instead of printing the contents, it > prints the string version of the ref itself: "SCALAR(0x8ca70e4)". > > After some research, it seems that I can trigger this behavior by doing a > certain type of regex on the scalar reference, specifically: a successful > regex that includes a backreference.
> my $data = "hello\n"; > my $dataref = \$data; > $$dataref =~ s/(h)/$1/; interesting. I think the issue is that after your manipulations $dataref is no longer a plain PV. I used Devel::Peek to look at $dataref before and after and it changes from a PV to PVMG. where this trips up mod_perl is in Apache::write_client: SV *sv = SvROK(ST(i)) && (SvTYPE(SvRV(ST(i))) == SVt_PV) ? (SV*)SvRV(ST(i)) : ST(i); so, if the scalar reference to be printed isn't of type SVt_PV it does not get dereferenced. I suppose we could change that to a SvPOK check instead, but I'm really not inclined to change anything here - doug has said several times that the magical dereferencing in $r->print() was a bad idea and should be considered deprecated. it's not in 2.0 either, so you'll need to dereference yourself in order to port your code (someday :) but thanks for the report - it's fun to track this kind of stuff down, even if we end up not changing anything :) --Geoff -- Reporting bugs: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html