sub Compare_Vectors { my( $x, $y )= @_; for my $i ( 0..$#x ) { my $cmp= $x[$i] <=> ( $y[$i] || 0 ); return $cmp if $cmp; } return 0 <=> ( $y[@x] || 0 ); } sub Delta_YMDHMS { my $x= [ splice @_, 0, 6 ]; my $y= [ @_ ]; my $sign= 1; if( Compare_Vectors( $x, $y ) < 0 ) { $sign= -1; ( $x, $y )= ( $y, $x ); } return map $sign*$_, Date::Calc::Delta_YMDHMS( @$x, @$y ); }