bharathinc has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I have the below code to sort child elements based on attribute. The code uses TWIG inbuilt method sort_children_on_value. Though the fuctionality works, I am getting below error " Use of uninitialized value in string comparison (cmp) at C:/Perl/site/lib/XML/Twig.pm line 8820. " If the test XML is bigger one this error appears more than 200 times. Could any one help me in resolving this. Thank you in advance.

#!/bin/perl -w use strict; use XML::Twig; my $twig= XML::Twig->new(pretty_print=>'indented'); #$twig->parsefile("OpsbankII-im1.xml"); $twig->parse(\*DATA); my $root=$twig->root; $root->first_child->sort_children_on_att("type"); sort_my_kids($root); $twig->print; #---------- sub sort_my_kids{ my $me = shift; $me->sort_children_on_value; foreach my $kid($me->children){ sort_my_kids($kid); # Recursive } } __DATA__ <root> <enhancement> <descriptorgroup> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> algorithm </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> colon diverticulosis </mainterm> <link> surgery </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> disease severity </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> recurrent disease </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> review </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> sigmoidectomy </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> surgical technique </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> treatment indication </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 2715 </classification-code> </classification> <classification> <classification-code> 2746 </classification-code> </classification> </classifications> </classificationgroup> </enhancement> <enhancement> <descriptorgroup> <descriptors type="DRG" controlled="y"> <descriptor> <mainterm weight="a" candidate="n"> DNA binding protein </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> DNA polymerase </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> initiation factor </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> plasmid DNA </mainterm> <link> endogenous compound </link> </descriptor> </descriptors> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> animal cell </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> article </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> chromatin </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> DNA replication </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> DNA replication origin </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> DNA supercoiling </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> egg </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> nonhuman </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> plasmid </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> Xenopus laevis </mainterm> </descriptor> </descriptors> <descriptors type="SPC" controlled="y"> <descriptor> <mainterm candidate="n"> Animalia </mainterm> </descriptor> <descriptor> <mainterm candidate="n"> Eukaryota </mainterm> </descriptor> <descriptor> <mainterm candidate="n"> Xenopus laevis </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 1312 </classification-code> </classification> </classifications> </classificationgroup> <chemicalgroup> <chemicals source="esbd"> <chemical> <chemical-name> 37217-33-7 </chemical-name> <cas-registry-number> DNA polymerase </cas-registry-number> </chemical> </chemicals> </chemicalgroup> </enhancement> <enhancement> <descriptorgroup> <descriptors type="DRG" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> acetonitrile derivative </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> benzene derivative </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> cyclohexane derivative </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> lactic acid derivative </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> lactone derivative </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> organic solvent </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> poly(3 hydroxybutyric acid) </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="a" candidate="y"> poly(3 hydroxybutyric acid) depolymerase </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> polyhydroxyalkanoic acid </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> unclassified drug </mainterm> </descriptor> </descriptors> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> article </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> catalysis </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> enzyme activity </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> esterification </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> hydrolysis </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> nonhuman </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> polymerization </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> Pseudomonas </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="y"> pseudomonas lemoignei </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> reaction analysis </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> stereochemistry </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> synthesis </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 1605 </classification-code> </classification> </classifications> </classificationgroup> <chemicalgroup> <chemicals source="esbd"> <chemical> <chemical-name> 26063-00-3 </chemical-name> <cas-registry-number> poly(3 hydroxybutyric acid) </cas-registry-number> </chemical> </chemicals> </chemicalgroup> </enhancement> <enhancement> <descriptorgroup> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> axillary lymph node </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> breast carcinoma </mainterm> <link> diagnosis </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> cancer staging </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> cancer surgery </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> lymph node dissection </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> lymph node metastasis </mainterm> <link> complication </link> <link> surgery </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> priority journal </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> prognosis </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> review </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> treatment outcome </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> treatment planning </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 1306 </classification-code> </classification> <classification> <classification-code> 2730 </classification-code> </classification> </classifications> </classificationgroup> </enhancement> <enhancement> <descriptorgroup> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> aged </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> article </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> electrode </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> female </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> heart atrium </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> heart pacing </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> heart ventricle </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> implantation </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> longevity </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> major clinical study </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> male </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> medical instrumentation </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> survival </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> treatment indication </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 1314 </classification-code> </classification> <classification> <classification-code> 2705 </classification-code> </classification> </classifications> </classificationgroup> <manufacturergroup> <manufacturers type="MNV"> <manufacturer country="usa"> Intermedics </manufacturer> </manufacturers> </manufacturergroup> <tradenamegroup> <tradenames type="TNV"> <trademanuitem> <tradename> ThinLine bipolar pacing lead </tradename> <manufacturer country="usa"> Intermedics </manufacturer> </trademanuitem> </tradenames> </tradenamegroup> </enhancement> <enhancement> <descriptorgroup> <descriptors type="DRG" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> C reactive protein </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> fibrinogen </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> heat shock protein 60 </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> high density lipoprotein cholesterol </mainterm> <link> endogenous compound </link> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> roxithromycin </mainterm> <link> drug therapy </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> triacylglycerol </mainterm> <link> endogenous compound </link> </descriptor> </descriptors> <descriptors type="MED" controlled="y"> <descriptor> <mainterm weight="b" candidate="n"> angiography </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> atherosclerosis </mainterm> <link> etiology </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> bacterium isolation </mainterm> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> chlamydiasis </mainterm> <link> drug therapy </link> </descriptor> <descriptor> <mainterm weight="a" candidate="n"> Chlamydophila pneumoniae </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> controlled study </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> disease association </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> endothelium injury </mainterm> <link> diagnosis </link> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human cell </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> human tissue </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> immunoregulation </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> pathogenesis </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> priority journal </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> review </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> risk factor </mainterm> </descriptor> <descriptor> <mainterm weight="b" candidate="n"> seroepidemiology </mainterm> </descriptor> </descriptors> </descriptorgroup> <classificationgroup> <classifications type="ASJC"> <classification> <classification-code> 2705 </classification-code> </classification> </classifications> </classificationgroup> <chemicalgroup> <chemicals source="esbd"> <chemical> <chemical-name> 9001-32-5 </chemical-name> <cas-registry-number> fibrinogen </cas-registry-number> </chemical> </chemicals> <chemicals source="esbd"> <chemical> <chemical-name> 9007-41-4 </chemical-name> <cas-registry-number> C reactive protein </cas-registry-number> </chemical> </chemicals> <chemicals source="esbd"> <chemical> <chemical-name> 80214-83-1 </chemical-name> <cas-registry-number> roxithromycin </cas-registry-number> </chemical> </chemicals> </chemicalgroup> </enhancement> </root>

Replies are listed 'Best First'.
Re: Use of uninitialized value in string comparison (cmp)
by moritz (Cardinal) on Mar 19, 2010 at 07:22 UTC
    $root->first_child->sort_children_on_att("type");

    This line generates the warning - maybe XML::Twig has a problem with sorting if only one child node is present?

    Perl 6 - links to (nearly) everything that is Perl 6.
Re: Use of uninitialized value in string comparison (cmp)
by pajout (Curate) on Mar 19, 2010 at 09:30 UTC
    Firstly - I think it is better to isolate and _minimize_ the problem definition; shorter and indented XML document might be better for reading. My experience is that I often solve my problem when I minimize it...

    Secondly - I GUESS that you try to sort elements which do not have attribute "type".

      Thanks a lot to every one. I got an hint now to solve this. Sorry about sending a big xml DATA, I was not getting this error when it was few lines of XML. I got the errors only when it was a big xml. In future I will try to send the indented xml. Thanks again to all.

        bharathinc:

        Yes, that's why pajout mentioned the tip on minimizing your code example. You'll find that while minimizing your code to the minimum case that shows the fault, you'll usually find the line(s) of code or data that exhibit the problem. Once you know those few lines, the error frequently sticks out like a sore thumb. So you get the answer quicker, and learn faster to boot.

        ...roboticus