Если вы работаете с проверкой заражения, это не способ сделать это. Вы должны соответствовать шаблону, который вам нужен, затем запомните это в переменной памяти, чтобы очистить эту грязь:
my $this = ...;
my $regex = qr/
^ # beginning of string
( # start of $1
[0-9]{8}
\.
(gif|jpg) # extension in $2
)
\z #end of string
/x;
my( $cleansed, $extension ) = do {
if( $this =~ m/$regex/ ) { ( $1, $2 ) }
else { die "Bad filename!" }
};
Я не уверен, почему у вас есть \b
в начале вашего регулярного выражения. Это, вероятно, не делает то, что вы думаете, что делает. Если вы хотите, чтобы имя файла состояло только из цифр, вместо него использовалось начало строки ^
. Таким образом, ничто не может прийти до цифр. Точно так же конец якоря строки \z
говорит о том, что после расширения ничего не может прийти.
Если вам нужно сопоставить расширение с типом контента для ответа HTTP, что, я полагаю, вы делаете, вы можете использовать хеш для создания карты:
my %types = (
jpg => jpeg,
gif => gif,
...
);
Теперь, когда у вас есть хеш, вы можете использовать его как еще один уровень проверки:
unless( exists $types{$extension} ) { die "Unsupported type!" }