O código é uma bagunça devido ao uso infeliz da interpolação de aspas duplas para definir o regex; Em vez disso, o operador qr/.../
deve ser usado. Em vez de descobrir as regras de interpolação como parte de uma limpeza de código, é possível depurar o regex:
#!/usr/bin/env perl
use strict;
use warnings;
use re 'debugcolor';
my $blah = "[\?!()\";/\|‘]";
print "something\n" if "not important" =~ m/$blah/;
Esta corrida mostra o regex como [\?!()%";/\|%x{e2}%x{80}%x{98}]
, com o %x
bits maluco indicando que o ‘
é realmente uma aspa inteligente; algum software ao longo do caminho (provavelmente) corrompeu esse código. Diversão! Quanto à correção, reescreva o código para usar qr
e, em seguida, verifique o novo código com re
:
#!/usr/bin/env perl
use strict;
use warnings;
use re 'debugcolor';
my $blah = qr#[?!()";/|']#;
use Data::Dumper; warn Dumper $blah;
print "something\n" if "not important" =~ m/$blah/;
Deixarei para você decidir se \
deve fazer parte da regex e ponderar por que ela aparece listada duas vezes. Existem testes de unidade e documentação para este código, certo?