I feel for you but there really should exist nothing like a number called -0 or +0. It looks ambiguous as to whether qw will think it is true or not. It is really an imaginary conundrum and dependent on unwritten rules of logic and how perl interprets it. Why not replace the second character of
$B[0] with a 1 so you have +1 or -1? That way you can stay sane. :>
$ perl -le '@B=qw(-0 4 5 6); $B[0] = substr($B[0],0,1) . 1;
print map $B[0]*$_ . " ", @B[1..3];'
-4 -5 -6