Öznur Tastan <[EMAIL PROTECTED]> wrote:
: 
: ----- Original Message -----
: From: "Charles K. Clarkson" <[EMAIL PROTECTED]>
: 
: >    Unfortunately, I have no idea if I have helped or not.
:
: No you exactly helped me but now let me ask one more question.
: When using a hash of array of hashes or a hash of an array of arrays
: how can I insert an new element in if I know which group it 
: belongs to?
: for example how can I insert a new alignment whose
: seq1 AAAK
: seq2  VVV-
: score 10
: into group_name_1
: without backtracking how many elements group_name_1 contains
: so something like "push"?????


    push @{ $group{ group_name_1 } }, [ 'AAAK', ' VVV-', 10 ];

    Or:

    push @{ $group{ group_name_1 } },
        {
            seq1 => 'AAAK',
            seq2 => ' VVV-',
            score => 10
        };

    $group{ group_name_1 } is an array reference. They are similar
to the pointers used in C. Though not exactly the same.

    Wrapping a reference with @{} dereferences the array reference
so that it can be treated as an array. For convenience you could
also use:

my $group_ref = $group{ group_name_1 };
push @$group_ref, [ 'AAAK', ' VVV-', 10 ];

   Here, @$group_ref is a shortcut for @{ $group_ref }. Unfortunately,
you can't use @$group{ group_name_1 } in place of
@{ $group{ group_name_1 } }.

    You can determine the number of alignments in a group by
retrieving the scalar value of its dereferenced array reference:

my $group_size = @{ $group{ group_name_1 } };

Or:

foreach my $group ( keys %groups ) {
    printf "%s contains %s alignments.\n", $group, scalar @{ $groups{ $group
} };
}

    An array of all groups in either data structure is in
'keys %groups'. 


HTH,

Charles K. Clarkson
-- 
Head Bottle Washer,
Clarkson Energy Homes, Inc.
Mobile Home Specialists
254 968-8328


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to