One sets the variable to undef
, the other to 0. They're not equivalent. "Resetting" a variable is probably more like undef $bar
But which you want probably depends on what it is you want to do. For some applications, you'd set $bar=0 initially (or $bar='' for others), so that could be useful.
To print the sum of the numbers in an array,
$sum = 0;
$sum += $_ for @array;
print "Sum is $sum\n";
Using undef $sum
would be a somewhat subtle error in this case.
Other times, you want undefinedness, and you undef things accordingly. Which is right to use depends on what is "right".