[Bioperl-l] New Annotation interfaces!

Hilmar Lapp hilmarl@yahoo.com
Tue, 30 Oct 2001 22:31:38 -0800

Ewan Birney wrote:
> The second method allows annotations to at least attempt to represent
> themselves as pure data for storage/display/whatever. The method
> hash_tree
>    $hash = $annotation->hash_tree();
> should return an anonymous hash with "XML-like" formatting. The
> formatting is as follows.
>   (1) For each key in the hash, if the value is a reference'd array -
>       (2) For each element of the array if the value is a object -

So this should better read

        For each element
        (2) if the value is an object
>           Assumme the object has the method "hash_tree";
>       (3) else if the value is a referene to a hash
>           Recurse again from point (1)
>       (4) else
>           Assumme the value is a scalar, and handle it directly as text
>    (5) else (if not an array) apply rules 2,3 and 4 to value

The difficulty I see here is how do you cleanly and generically
tell apart an object from a hash reference in Perl? ref($thingy)
is true and a string in
both cases; in fact an object in perl mostly is a hash ref. So I
would actually
not allow an 'unblessed hash ref' as a tree node, i.e., if a hash
ref, it has
to be blessed into a base class (AnnotationI? AnnotationNode?
TreeNode?), or
you instantiate that base class right away and then put any keys
you want. This also means that that base class must not put its
own private keys, or you introduce some rule how tree-related keys
have to start (doesn't sound very sane).


Hilmar Lapp                              email: hilmarl@yahoo.com
San Diego, Ca. 92130                     phone: +1 858 812 1757