Yes,
AnomalousMonk, you're right. I wanted to point out the logical error ("and" instead of "or" in the conditional), but you're absolutely right that the regexes should also be fixed.
Perhaps something like:
print "Word $Disc is corrupt!\n" if $D1 !~ /^0{7}$/ or $D2 !~ /[0-9]/;
And the first part of the conditional could actually be replaced by a string inequality operator rather than a regex:
print "Word $Disc is corrupt!\n" if ($D1 ne '0' x 7) or $D2 !~ /[0-9]/
+;
Update: s/instead or "or"/instead of "or"/;. Thanks to
Discipulus for pointing out the typo.