Si vous êtes inquiet au sujet de capture et d'impression par mégarde nulls, il y a un moyen rapide et facile que presque tout le monde vous recommande faire en premier: ajouter ce qui suit à votre programme:
use strict;
use warnings;
Le problème en particulier semble impair; quand je fais
my $foo = 'zip';
$foo =~ /(bal)/;
print "\$1: '$1'";
Je reçois
$1: ''
(et avec une utilisation stricte et des avertissements, l'erreur supplémentaire
Use of uninitialized value in concatenation (.) or string at - line 5.
Bien sûr, vous pouvez empêcher 1 $ de jamais être nulle si vous Testez votre regex:
if ($foo =~ /(pattern)/) {
# $1 is guaranteed to be ok here, if it matched
}
Alors oui, il se peut que votre enregistreur ré-interprète $ 1 comme autre chose. Essayez d'ajouter deux autres \\
; un pour échapper le $, et un autre pour échapper une barre oblique inverse supplémentaire. Ainsi, il avait l'air d'
print "\\\$1: '$1'";
Quelle sortie espériez-vous obtenir? – crazyscot
La méthode 'Logger :: log' fait-elle une interpolation sur son entrée? D'où vient la méthode' Logger :: log', de toute façon? – mob
La sortie que j'espérais obtenir était "$ 1 = ''". est personnalisé et la ligne qui sort vers le fichier journal ressemble à: print LOG "$ date: $ msg \ n "; Donc il fait sa propre interpolation de la chaîne plus tard. Cela pourrait-il être ce qui le fait? – shiftycow