... I want the program to report an error "warn" but continue and work with the correct argument.
In general, I find I have enough trouble when I try to guess what my programs should be doing; I certainly don't want my programs making those guesses!
However, in the spirit of giving good advice and then immediately undercutting it, you might look at Text::Levenshtein and related fuzzy string comparison modules; see Levenshtein distance. The strategy might be something like "look for all file names in a given directory with an L-D (or other match metric) less than a given threshold, then use the file name with the least distance if that name is unique".
>perl -wMstrict -le
"use Text::LevenshteinXS;
;;
my $tyop = 'twst.html';
for my $try (qw(test.html testb.html)) {
my $d = distance($tyop, $try);
print qq{'$tyop' < $d > '$try'};
}
"
'twst.html' < 1 > 'test.html'
'twst.html' < 2 > 'testb.html'