On Mon, 17 Mar 2003, Thomas Hilbig wrote: > I need to dup the STDOUT handle for a package > (Spreadsheet::WriteExcel) to work properly under > mod_perl. > The code below from the MP1 User documentation now > gives an error in MP2: > > use constant IS_MODPERL => $ENV{MOD_PERL}; > if (IS_MODPERL) { > tie *OUT, 'Apache'; > } else { > open (OUT, ">-"); > } > > Under MP2 I get the following error: Can't locate > object method "TIEHANDLE" via package "Apache" > Is there an updated method for doing this in MP2? > My environment is : mod_perl/1.99_05-dev, Apache > httpd-2.0.40-8, RedHat 8.0
Given that mod_perl 2 is _beta_ software, you should be using the current version. It's 1.99_09, and Apache is at 2.0.44. Try the following commands to get the latest mod_perl sources so you can rebuild: $ cvs -d :pserver:[EMAIL PROTECTED]:/home/cvspublic login $ cvs -d :pserver:[EMAIL PROTECTED]:/home/cvspublic co modperl-2.0 You can get Apache 2.0.44 from the apache site. FWIW once you get the current apache installed you can rebuild mod_perl more easily than mp1, since it uses the already-built apache. Now as for TIEHANDLE, you have not loaded the right module. Try reading the docs about porting at http://perl.apache.org/docs/2.0/devel/porting/porting.html and especially the section on locating missing modules: http://perl.apache.org/docs/2.0/devel/porting/porting.html#Figuring_Out_What_Modules_Need_to_be_Loaded This will lead you to do: $ perl -MApache2 -MModPerl::MethodLookup -le \ > 'print((ModPerl::MethodLookup::lookup_method(shift))[0])' \ > TIEHANDLE which prints: There is more than one class with method 'TIEHANDLE' try one of: use Apache::RequestIO (); use Apache::Filter (); >From there you could probably guess that the module you need to load is Apache::RequestIO, right? HTH, - nick -- ~~~~~~~~~~~~~~~~~~~~ Nick Tonkin {|8^)>