Поскольку hobbs указывает на , если вы уверены, что будете на 5.10 или более поздней версии, вы можете использовать встроенную проверку:
use 5.010;
use re qw(is_regexp);
if (is_regexp($pattern)) {
say "It's a regex";
} else {
say "Not a regex";
}
Однако у меня не всегда есть такая опция. В общем, я делаю это путем проверки значения прототипа с помощью ref :
if( ref $scalar eq ref qr// ) { ... }
Одна из причин, по которой я начал это делать, заключалась в том, что я никогда не мог вспомнить имя типа для ссылки на регулярное выражение. Я даже не могу вспомнить это сейчас. Он также не в верхнем регистре, как остальные, потому что на самом деле это один из пакетов, реализованных в исходном коде perl (в regcomp.c , если вы хотите его увидеть).
Если вам приходится много делать, вы можете сделать это значение прототипа константой, используя ваш любимый создатель констант:
use constant REGEX_TYPE => ref qr//;
Я подробно об этом говорю в Эффективное программирование на Perl как «Элемент 59: Сравните значения с прототипами».
Если вы хотите попробовать это обоими способами, вы можете использовать проверку версии на Perl:
if( $] < 5.010 ) { warn "upgrade now!\n"; ... do it my way ... }
else { ... use is_regex ... }