in reply to difficulty in sorting

It looks like you are dealing with XML. It's generally a bad idea to try and hand parse XML. However there are some really good modules around to help. Consider this XML::Twig solution:

use strict; use warnings; use XML::Twig; my $xml = <<XML; <data> <ignore> This should be ignored. </ignore> <address> <state>address1</state> <ref refid="aff1">1</ref> <ref refid="aff2">2</ref> <ref refid="e2"/> <ref refid="e4"/> <ref refid="aff4">4</ref> </address> <address> <state>address1</state> <ref refid="aff1">1</ref> <ref refid="aff2">2</ref> <ref refid="e4"/> <ref refid="aff3">3</ref> </address> </data> XML my $twig = XML::Twig->new ( twig_roots => { 'address' => \&sortAddress, }, twig_print_outside_roots => 1, pretty_print => 'indented', ); $twig->parse ($xml); sub sortAddress { my ($t, $address)= @_; my @children = $address->cut_children (); my @untouchables = grep {$_->tag () ne 'ref'} @children; my @sorted = sort {$a->att ('refid') cmp $b->att ('refid')} grep {$_->tag () eq 'ref'} @children; $_->paste (last_child => $address) for @untouchables; $_->paste (last_child => $address) for @sorted; $address->print (); }

Prints:

<data> <ignore> This should be ignored. </ignore> <address> <state>address1</state> <ref refid="aff1">1</ref> <ref refid="aff2">2</ref> <ref refid="aff4">4</ref> <ref refid="e2"/> <ref refid="e4"/> </address> <address> <state>address1</state> <ref refid="aff1">1</ref> <ref refid="aff2">2</ref> <ref refid="aff3">3</ref> <ref refid="e4"/> </address> </data>

Perl reduces RSI - it saves typing

Replies are listed 'Best First'.
Re^2: difficulty in sorting
by texuser74 (Monk) on Aug 21, 2008 at 06:13 UTC
    GrandFather, Thanks for your wonderful support. unfortunately my machine is having some problem with Twig module. I got to fix it first or may be i will upgrade my indigoperl.