Вы хотите
$string !~ /000/
Тест:
$ perl -nle'printf "%s is %s\n", $_, !/000/ ? "fine" : "not fine"' <<'.'
001234567502344001233400122300
0123456750023440012334012230
000123456750234400123340012230
001234567502344000123340012230
0012345675023440012334001223000
00123456750234400012334001223000
001002003004005006
001
10
01
000
.
001234567502344001233400122300 is fine
0123456750023440012334012230 is fine
000123456750234400123340012230 is not fine
001234567502344000123340012230 is not fine
0012345675023440012334001223000 is not fine
00123456750234400012334001223000 is not fine
001002003004005006 is fine
001 is fine
10 is fine
01 is fine
000 is not fine
Если предполагается, что это часть более крупного паттерна, то вы хотите убедиться, что каждая позиция не является началом 000
.
(?:(?!000).)*
Например,
/^(?:(?!000).)*\z/
Например,
my @safe_numbers = $string_with_multiple_numbers =~ /\b(?:(?!000)\d)*\b/g;