C:\@Work\Perl\monks\dani_cv>perl -wMstrict -le "use Text::LevenshteinXS qw(distance); my $base = shift; print qq(\noutput:); for my $try (@ARGV) { my $no = acquired_1_dollar($base, $try) ? q{} : q{NO }; print qq{$base <> $try: ${no}match}; } sub acquired_1_dollar { my ($base, $try) = @_; return $try =~ m{ \$ }xms && distance($base, $try) == 1; } " test.ext $test.ext te$st.ext test$.ext test.$ext test.e$xt test.ext$ $est.ext te$t.ext tes$.ext test$ext test.$xt test.e$t test.ex$ test.ext tost.ext te$t$.ext tet.ext t$t.ext tes$t$xt test$e$t "" $ test wertyu wert$yu w$er$tyu output: test.ext <> $test.ext: match test.ext <> te$st.ext: match test.ext <> test$.ext: match test.ext <> test.$ext: match test.ext <> test.e$xt: match test.ext <> test.ext$: match test.ext <> $est.ext: match test.ext <> te$t.ext: match test.ext <> tes$.ext: match test.ext <> test$ext: match test.ext <> test.$xt: match test.ext <> test.e$t: match test.ext <> test.ex$: match test.ext <> test.ext: NO match test.ext <> tost.ext: NO match test.ext <> te$t$.ext: NO match test.ext <> tet.ext: NO match test.ext <> t$t.ext: NO match test.ext <> tes$t$xt: NO match test.ext <> test$e$t: NO match test.ext <> : NO match test.ext <> $: NO match test.ext <> test: NO match test.ext <> wertyu: NO match test.ext <> wert$yu: NO match test.ext <> w$er$tyu: NO match