[Mapserver-users] Problems with PerlMapscript 3.7 Syntax

Slaven Rezic slaven at rezic.de
Thu May 1 15:45:07 EDT 2003


Sean Gillies <sgillies at frii.com> writes:

> I can't speak for the developer who committed the change, but
> it appears to me that the developer wants to promote some
> degree of uniformity across object methods.  The mapObj has a
> save() method that outputs to disk, and it seems natural that
> the extension to imageObj that outputs to disk should also be
> named 'save'.
> 
> Is not at all productive?  If all mapping objects had a save()
> method, one could reliably save an arbitrary object without
> having to do any type checking, or looking up whether you have
> to use 'saveMap' or 'saveImage' or 'saveSymbol'.  Objects
> save themselves using methods uniformly named 'save'.  This
> promotes development of more modular and reusable code.  To me,
> that is productive.
> 
> I don't deny that refactoring scripts to work with the newer
> MapScript module will have a cost.  One way to enable a script
> to work with 3.6 mapscript and 4.0 mapscript is to use
> try/catch.  This example in Python:
> 
> try:
> 	img.saveImage('foo.png')
> except AttributeError:
> 	img.save('foo.png')
> 
> With Perl it's a bit uglier since you have to eval() and trap
> errors, but it's the same idea.
> 

I have to disagree. It's not ugly, it's maybe named somewhat strange
for non-perlers:

eval {
    $img->saveImage("foo.png");
}; if ($@) {
    $img->save("foo.png");
}

But you should better either use ->can:

    $image_save = $img->can("save") || $img->can("saveImage");
    $img->save("foo.png");

or create a compatibility method:

    if (!defined &mapscript::imageObj::saveImage) {
        *mapscript::imageObj::saveImage = \&mapscript::imageObj::save;
    }

Such a module with compatibility methods could even go into the
standard mapserver distribution.

Regards,
	Slaven

-- 
Slaven Rezic - slaven at rezic.de
  BBBike - route planner for cyclists in Berlin
  WWW version:                           http://www.bbbike.de
  Perl/Tk version for Unix and Windows:  http://bbbike.sourceforge.net



More information about the mapserver-users mailing list