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

Try writing a short program that demonstrates the problem. With what you have provided it's not clear where most of the variables are generated or how and there is nothing anywhere to suggest that 47, of either sign, is the right answer.


DWIM is Perl's answer to Gödel
  • Comment on Re: why the subtract result is negative when i use XML::Smart!

Replies are listed 'Best First'.
Re^2: why the subtract result is negative when i use XML::Smart!
by Robincui (Initiate) on Aug 20, 2007 at 07:04 UTC
    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]#

      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