Try using CORE::open to be sure that the default open is being called.

darren

Sam Carleton ([EMAIL PROTECTED]) said something to this effect:
> I am trying to get the Apache::Magick module from the O'Reilly book
> "Writing Apache Modules with Perl and C" to work.  The error I am
> running into is:
> 
> Can't locate object method "OPEN" via package "Apache" (line 80)
> 
> The looks real simply:
> 
> open(STDOUT, ">&=" . fileno($fh));
> 
> Any thoughts on what is going wrong?
> 
> Sam
> 
> P.S.  The whole Apache::Magick is attached, in case you want to look at
> it.
> 
> 

> package Apache::Magick;
> 
> use strict;
> use Apache::Constants qw(:common);
> use Image::Magick ();
> use Apache::File ();
> use File::Basename qw(fileparse);
> use DirHandle ();
> 
> my %LegalArguments = map { $_ => 1 } 
> qw (adjoin background bordercolor colormap colorspace
>     colors compress density dispose delay dither
>     display font format iterations interlace
>     loop magick mattecolor monochrome page pointsize
>     preview_type quality scene subimage subrange
>     size tile texture treedepth undercolor);
> 
> my %LegalFilters = map { $_ => 1 } 
> qw(AddNoise Blur Border Charcoal Chop
>    Contrast Crop Colorize Comment CycleColormap
>    Despeckle Draw Edge Emboss Enhance Equalize Flip Flop
>    Frame Gamma Implode Label Layer Magnify Map Minify
>    Modulate Negate Normalize OilPaint Opaque Quantize
>    Raise ReduceNoise Rotate Sample Scale Segment Shade
>    Sharpen Shear Solarize Spread Swirl Texture Transparent
>    Threshold Trim Wave Zoom);
> 
> sub handler {
>     my $r = shift;
>     
>     # get the name of the requested file
>     my $file = $r->filename;
>     
>     # If the file exists and there are no transformation arguments
>     # just decline the transaction.  It will be handled as usual.
>     return DECLINED unless $r->args || $r->path_info || !-r $r->finfo;
>     
>     my $source;
>     my ($base, $directory, $extension) = fileparse($file, '\.\w+');
>     if (-r $r->finfo) { # file exists, so it becomes the source
>       $source = $file;
>     } 
>     else {              # file doesn't exist, so we search for it
>       return DECLINED unless -r $directory;
>       $source = find_image($r, $directory, $base);
>     }
>     
>     unless ($source) {
>       $r->log_error("Couldn't find a replacement for $file");
>       return NOT_FOUND;
>     }
>     
>     $r->send_http_header;
>     return OK if $r->header_only;
>     
>     # Read the image
>     my $q = Image::Magick->new;
>     my $err = $q->Read($source);
> 
>     # Conversion arguments are kept in the query string, and the
>     # image filter operations are kept in the path info
>     my(%arguments) = $r->args;
> 
>     # Run the filters
>     foreach (split '/', $r->path_info) {
>       my $filter = ucfirst $_;  
>       next unless $LegalFilters{$filter};
>       $err ||= $q->$filter(%arguments);
>     }
> 
>     # Remove invalid arguments before the conversion
>     foreach (keys %arguments) {       
>       delete $arguments{$_} unless $LegalArguments{$_};
>     }
> 
>     # Create a temporary file name to use for conversion
>     my($tmpnam, $fh) = Apache::File->tmpfile;
>     
>     # Write out the modified image
>     open(STDOUT, ">&=" . fileno($fh));
>     $extension =~ s/^\.//;
>     $err ||= $q->Write('filename' => "\U$extension\L:-", %arguments);
>     if ($err) {
>       unlink $tmpnam;
>       $r->log_error($err);
>       return SERVER_ERROR;
>     }
>     close $fh;
>     
>     # At this point the conversion is all done!
>     # reopen for reading
>     $fh = Apache::File->new($tmpnam);
>     unless ($fh) {
>       $r->log_error("Couldn't open $tmpnam: $!");
>       return SERVER_ERROR;
>     }
>     
>     # send the file
>     $r->send_fd($fh);
>     
>     # clean up and go
>     unlink $tmpnam;  
>     return OK;
> }
> 
> sub find_image {
>     my ($r, $directory, $base) = @_;
>     my $dh = DirHandle->new($directory) or return;
> 
>     my $source;
>     for my $entry ($dh->read) {
>       my $candidate = fileparse($entry, '\.\w+');
>       if ($base eq $candidate) {
>           # determine whether this is an image file
>           $source = join '', $directory, $entry;
>           my $subr = $r->lookup_file($source);
>           last if $subr->content_type =~ m:^image/:;
>           $source = "";
>       }
>     }
>     $dh->close;
>     return $source;
> }
> 
> 1;
> __END__


-- 
The great artist and thinker are the simplifiers.

Reply via email to