J'aimerais utiliser une variable comme modèle RegEx pour faire correspondre les noms de fichiers:
my $file = "test~";
my $regex1 = '^.+\Q~\E$';
my $regex2 = '^.+\\Q~\\E$';
print int($file =~ m/$regex1/)."\n";
print int($file =~ m/$regex2/)."\n";
print int($file =~ m/^.+\Q~\E$/)."\n";
Le résultat (ou sur ideone.com ):
0
0
1
Quelqu'un peut-il m'expliquer comment utiliser une variable comme modèle RegEx?
Vous ne pouvez pas utiliser \Q
dans une chaîne entre guillemets simples/non interpolée. Il doit être vu par le lexer.
Quoi qu'il en soit, le tilde n'est pas un méta-caractère.
Ajouter use regex "debug"
et vous verrez ce qui se passe réellement.
Comme documentation dit:
$re = qr/$pattern/;
$string =~ /foo${re}bar/; # can be interpolated in other patterns
$string =~ $re; # or used standalone
$string =~ /$re/; # or this way
Donc, utilisez l'opérateur qr
de type guillemet.