sub trunc_match { my ($what) = @_; my @bits; for (1..length $what) { push (@bits,$what); chop $what; } return '('.join ('|', map { quotemeta($_) } @bits).')$'; } my $rx = trunc_match ("foobar"); $_ = "This sentence ends in foob"; if (/$rx/) { print "Truncated, ends in '$1'\n"; } #### (foobar|fooba|foob|foo|fo|f)$