da die regex weder am anfang noch am ende begrenzt ist, matcht sie auf alles, was eine ziffer beinhaltet, egal, was davor oder danach kommt.
für dein problem brauchst du vermutlich sowas:
if ($file =~ m/\A\d\.txt\z/) {
}
elsif ($file =~ m/\A\d{2}\.txt\z/) {
}
...
\A bedeutet: anfang des strings (alternativ geht auch
^, siehe dazu die doku)
\z bedeutet: ende des strings
siehe
perlretut