Reviews by Michael Zedeler

cpanratings
 

RSS

SOAP-Lite (0.710.10) *

This module has fairly poor documentation and reading the source code is definately not recommended. You will find many hacks and odd constructs there.

Whats worse: the basic symmetry principle that objects representing incoming SOAP requests (or responses) should be identical to objects representing outgoing requests (or responses) is not adhered to. If you want to do anything beyond basic SOAP processing, this will really ruin your day. Especially because the module tries to behave as a black box, trying to force you to manipulate SOAP messages in a few, very inflexible ways.

But what will completely ruin your day is that the module tries to guess some clever perl structures to use for SOAP messages as well as autoguessing types in the envelope. What does this mean? It means that if you have a response saying

<myversion>1</myversion>

...SOAP::Lite will happily claim that the type of myversion is an integer. Next time you send a message with slightly different content:

<myversion>1.1-alpha</myversion>

...the module will claim that the type of myversion is text.

The same goes for the perl structures returned when parsing SOAP requests:

<rows>

<row>1</row>
</rows>

Becomes

{row => 1}

Whereas

<rows>

<row>1</row>

<row>1</row>
</rows>

Becomes

[

{row => 1},

{row => 1}
]

This behaviour is absolutely not something you want in any system using SOAP integration, since it makes it inherently unreliable. Its a great way of writing software that you'll be bound to maintain for ages.

Iterator (0.03) **

This module does everything you'd expect from a class implementing an iterator, apart from one thing: it buffers one element of the stream of scalars, produced by your code. The buffering is done by pre-fetching one element as soon as your iterator has been initialized. Every subsequent fetch will return the buffered element and add a fresh element to the internal buffer.

This behavior leads to unexpected results, and if you are using non-pure functions for you iterators (such as database operations or accessing shared variables), your code may deadlock or behave as if everything happens out of order.

If you do use pure functions for your iterators, you may find that this module is exactly what you need.

only (0.28) **

Only is almost by definition the solution for the right problem. Is enables you to store different versions of the same perl module and at load time select exactly which version, you'd like to use.

The problem (alas - there is a problem) is that it seems that there is a small bug in only.pms version parsing code that has made it unable to load anything but exact module versions. In other words - it is not possibly to actually make the module load any version newer than a given version number.

I may be wrong, but countless hours of probing the source of only.pm has led me to this conclusion.