J'ai une ligne dans mon fichier qui contient la chaîne suivante
$print = "SM_sdo_debugss_cxct6_CSCTM_4 csctm_gen[4]_ctm_i_nctm_I_csctm (4+5)";
$my_meta = "csctm_gen[4]_ctm_i_nctm_I_csctm";
print "I got thisn" if($print =~ /Q$my_metaE/);
Mais c’est impossible de trouver le $my_meta
chaîne dans $print
. Pourquoi?
Réponses:
0 pour la réponse № 1Votre première chaîne est entre guillemets, les séquences d'échappement avec une barre oblique inversée sont donc traitées.
cs
représente Ctrl-S, qui peut également être écrit chr(19)
ou "x13"
.
Votre deuxième chaîne est entre guillemets simples, ce qui ignore les échappements avec une barre oblique inversée (sauf \
et "
).
Donc, votre regex finit par chercher une séquence de 3 caractères
c
s
, mais votre chaîne cible contient un seul octet 0x13
.
Pour résoudre ce problème, écrivez "... \cs ..."
dans votre première chaîne (la première barre oblique inverse échappe à la seconde), ou utilisez des guillemets simples pour votre première chaîne ("... cs ..."
).