#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Sep 2012
    Posts
    2
    Rep Power
    0

    Writing formula in perl..


    Hi,

    I am new to perl. I am trying to parse my xml file to my script and generating an include or define file... My xml (test.xml) looks like:

    Code:
    <?xml version="1.0" encoding="UTF-8"?> 
    <DEFINES> 
    <TEST NAME="CHAIN_UNITS" VALUE="18"></TEST> 
    <TEST NAME="CHIP_UNITS" VALUE="33"></TEST> 
    <TEST NAME="MUX_WIDTH" VALUE="10"></TEST> 
    <TEST NAME="REGISTER_LENGTH" VALUE="9"></TEST> 
    <INSTANCES> 
    </INSTANCES> 
    <FUB></FUB> 
    <POWER_DOMAIN></POWER_DOMAIN> 
    <SECURITY></SECURITY> 
    </DEFINES>
    My perl script is as:

    Code:
    #perl script 
    use strict; # Strict formatting 
    use warnings; 
    use Data::Dumper; 
    use XML::XPath; 
    use XML::XPath::XMLParser; 
    use Getopt::Long; 
    use Term::ANSIColor; 
    
    print "Hello world\n"; 
    
    my $out=""; 
    my $length=""; 
    #create an object to parse the file 
    my $xp = XML::XPath->new(filename => 'test.xml'); 
    my $nodeset =$xp->findnodes('/DEFINES/TEST'); 
    $out.="//\n"; 
    $out.="//\n"; 
    
    foreach my $node( $nodeset->get_nodelist) 
    { 
    my $namenode=$node->getAttributeNode("NAME"); 
    my $name=$namenode->getValue; 
    my $namelow=lc$name; 
    
    my $valuenode=$node->getAttributeNode("VALUE"); 
    my $value=$valuenode->getValue; 
    my $valuelow=lc$value; 
    
    $out.="`define $name $value\n"; 
    } 
    
    foreach my $node( $nodeset->get_nodelist) 
    { 
    my $namenode=$node->getAttributeNode("NAME"); 
    my $name=$namenode->getValue; 
    my $namelow=lc$name; 
    
    my $valuenode=$node->getAttributeNode("VALUE"); 
    my $value=$valuenode->getValue; 
    my $valuelow=lc$value; 
    
    
    $sdi_length="`define BOUNDARY_LENGTH "; 
    } 
    
    my $filename="./network/defines.sv"; 
    open (FILE, "> $filename") or die ("Error: could not open file $filename for writing\n"); 
    print FILE $out; 
    print FILE $length; 
    close FILE;
    The formulae for calculating BOUNDARY_LENGTH is:

    BOUNDARY_LENGTH = CHAIN_UNITS*MUX_WIDTH + CHIP_UNITS*MUX_WIDTH

    My question here is that, How can I plug this formula into my script so that it gives me output in the file define.sv as "`define BOUNDARY_LENGTH 510". There is no error in the above script. Kindly help me in using this formula in my script.

    Thanks.
  2. #2
  3. Contributed User
    Devshed Specialist (4000 - 4499 posts)

    Join Date
    Jun 2005
    Posts
    4,365
    Rep Power
    1870
    How about this (for a hint)
    Code:
    #!/usr/bin/perl -w
    #perl script 
    use strict; # Strict formatting 
    use warnings; 
    use Data::Dumper; 
    use XML::XPath; 
    use XML::XPath::XMLParser; 
    use Getopt::Long; 
    use Term::ANSIColor; 
    
    my $xp = XML::XPath->new(filename => 'foo.xml'); 
    my $nodeset =$xp->findnodes('/DEFINES/TEST'); 
    my %symtable;
    
    foreach my $node( $nodeset->get_nodelist) 
    { 
        my $namenode=$node->getAttributeNode("NAME"); 
        my $name=$namenode->getValue; 
        my $namelow=lc$name; 
    
        my $valuenode=$node->getAttributeNode("VALUE"); 
        my $value=$valuenode->getValue; 
        my $valuelow=lc$value; 
    
        $symtable{$namelow} = $valuelow;
    } 
    
    # BOUNDARY_LENGTH = CHAIN_UNITS*MUX_WIDTH + CHIP_UNITS*MUX_WIDTH
    # <TEST NAME="CHAIN_UNITS" VALUE="18"></TEST> 
    # <TEST NAME="CHIP_UNITS" VALUE="33"></TEST> 
    # <TEST NAME="MUX_WIDTH" VALUE="10"></TEST> 
    # <TEST NAME="REGISTER_LENGTH" VALUE="9"></TEST> 
    my $answer = $symtable{"chain_units"} * $symtable{"mux_width"} +
            $symtable{"chip_units"} * $symtable{"mux_width"};
    print "Answer=$answer\n";
    $ perl foo.pl
    Answer=510


    If there is any chance at all that the input XML can be malformed, then you should guard the evaluation with a test for things like
    Code:
    if ( defined $symtable{"chain_units"} && defined $symtable{"mux_width"} )
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Sep 2012
    Posts
    2
    Rep Power
    0
    got it.. Thanks. It worked for me.

IMN logo majestic logo threadwatch logo seochat tools logo