As Transient said, it depends on your criteria. If it's the underscore-period combo you need taken care of, then gellyfish's solution should suffice. If it's just the last underscore no matter what, then a greedy regex like this could work:
my $txt = "This_has_under_scores.mp3";
$txt =~ s/(.+)_/$1/;
print $txt; # "This_has_underscores.mp3";
Update: ... or non-greedy from the other end:
$text =~ s/_(.*?)$/$1/;