in reply to Re: why the subtract result is negative when i use XML::Smart!
in thread why the subtract result is negative when i use XML::Smart!

A short snip code as below to demo the problem,the true result should be 730,but in fact i get -730. I use the newest Release XML-Smart-1.6.9. I doubt the problem is from the module: Object::MultiType.
[root@dw01 xml]# ls last.xml test.pl [root@dw01 xml]# more last.xml <?xml version="1.0" encoding="iso-8859-1" ?> <?meta name="GENERATOR" content="XML::Smart/1.6.9 Perl/5.008008 [linux +]" ?> <global_status> <status name="Uptime" value="4630" value_var="-861958"/> </global_status> [root@dw01 xml]# more test.pl #! /usr/bin/perl use XML::Smart; #get last status my $xml_last_status = XML::Smart->new('last.xml'); my $last_status_data = $xml_last_status->{global_status}->{status}[0]; my $last_value = $last_status_data->{value}; my $now_value = 5360; my $value_var = $now_value - $last_value; print "last_value: $last_value, now_value: $now_value, value_var: $val +ue_var\n"; [root@dw01 xml]# ./test.pl last_value: 4630, now_value: 5360, value_var: -730 [root@dw01 xml]#

Replies are listed 'Best First'.
Re^3: why the subtract result is negative when i use XML::Smart!
by GrandFather (Saint) on Aug 20, 2007 at 09:22 UTC

    It looks like a bug in Object::MultiType. $last_value is an XML::Smart object (which derives from Object::MultiType) and overloads subtraction. Looks like line 168 ($n -= $_[0] ;) in the sub _OVER_deinc in multitype.pm may have it backwards. Changing the last two line of the sub to:

    my $temp = scalar $_[0]; return $temp - $n;

    fixes the problem for this case. I can't guess what situation it may fail for though.

    You should raise a bug tag against the module perhaps?

    You can do that at rt://Object::MultiType


    DWIM is Perl's answer to Gödel