Hi everyone, I have been working on a web service for GM PerlMagick, and Moo was suggested. The GM object is kept across requests, but the image memory is freed (question below). Here is what it looks like: package Something::Magick;
use Graphics::Magick; use Dancer::Core::Types; # brings helper for types use MooX::Types::MooseLike::Base; # InstanceOf use MooX::Types::MooseLike; # Moo def must follow other defs. use Moo; with 'MooX::Singleton'; has image => ( is => 'rw', isa => InstanceOf['Graphics::Magick'], lazy => 1, builder => '_build_image' ); # The lazy attribute says to Moo that this attribute will be built (initialized) # only when called the first time. It means that the connection to GmImage won't be opened until necessary. sub _build_image { my ($self) = @_; Graphics::Magick->new( ); } sub BUILD { my ($self) = @_; $self->image( Graphics::Magick->new( )); } sub do_sequence { my $self = shift; my @seq = shift || 1; my $Arrayofhashes = \$seq[0][0]; my $sizeminus1 = @$$Arrayofhashes - 1; #++++++++++++++ 3 for my $i ( 0 .. $sizeminus1 ) { my $href = $seq[0][0][$i]; my $opname; my $filepath; my $gmparms; while( my ($k, $v) = each %$href ) { .... sanitize input .. if( $k eq 'op') { $opname = $v; } elsif( $k eq 'file') { $v =~ s/^\/+//; # remove any leading / $filepath = $v; } elsif( $k eq 'parms') { $gmparms = $v; } } .. if( $opname eq 'Read') { my $status = $self->image->Read( $absolute); warn "$status" if "$status"; } elsif( $opname eq 'Write') { my $status = $self->image->Write( $absolute); warn "$status" if "$status"; } ... # some op other than read,write # invoke it my $status = $self->image->$opname( $gmparms); warn "$status" if "$status"; } # delete all the images but retain the Graphics::Magick object # @$image = (); no # @self->image = (); no # @{self->image} = (); no my $i = 0; # while (defined ($self->image->[$i])) { while ( $i < 10) { if (defined ($self->image->[$i])) { undef ($self->image->[$i]); print "======== undef $i\n"; } $i++; } } My question is how can you delete all the images but retain the Graphics::Magick object? I do not want to use the undef loop above. With normal perlmagick, you would say @$image = (); ( http://www.graphicsmagick.org/perl.html ) Should I learn more about Perl XS? TIA -- Rick