[ic] image.tag in Perl context
Ethan Rowe
ethan at endpoint.com
Tue Jul 24 07:59:22 EDT 2007
Ton Verhagen wrote:
> Dear All,
>
> Seems that the image tag behaves differently when used
> in Perl context: image dimensions are discarded...
>
>
> Please observe the following:
> [image src='os28004.gif' imagesubdir='items']
>
> Result:
> <img src="/standard/images/items/os28004.gif" width="120" height="150">
>
> >> Image dimensions included !
>
>
> [perl]
> return $Tag->image( 'os28004.gif', {imagesubdir => 'items', } );
> [/perl]
>
> Result:
> <img src="/standard/images/items/os28004.gif">
>
> >> NO image dimensions !
>
>
> Some additional logging (after the 'eval') in the image tag shows:
> 'require' trapped by operation mask at
> /usr/local/lib/perl5/site_perl/5.8.2/Image/Size.pm line 20.
>
The operation mask is the wonderful magic of Safe. If you're running
things in [perl] or [calc] blocks, and you don't have allowglobal
activated, then the eval occurs within a Safe compartment. While the
$Tag object is set up with Safe to allow full execution of any methods,
it doesn't always work. This is the nature of Safe, and isn't really
something that can necessarily be fixed easily within Interchange itself.
So, the image tag issues a "use" or "require" when dimensions have been
requested, and that's blocked by Safe.
One possible workaround you could try:
* customize your version of the image tag and comment out the
use/require statement that's invoked in this case (around line 234 or
so, "require Image::Size"?)
* add a "Require module Image::Size" to your interchange.cfg.
That would ensure that the module was already loaded once IC was
processing requests, and the tag code ought to be able to simply call
the appropriate subs/methods.
Hope this helps.
- Ethan
--
Ethan Rowe
End Point Corporation
ethan at endpoint.com
More information about the interchange-users
mailing list