Ich benutze Perl 5.16.2, um zu versuchen, die Anzahl der Vorkommen eines bestimmten Trennzeichens in der $_
Zeichenfolge zu zählen. Das Trennzeichen wird über das Array @ARGV
an mein Perl-Programm übergeben. Ich überprüfe, dass es innerhalb des Programms korrekt ist. Meine Anweisung zum Zählen der Anzahl der Trennzeichen in der Zeichenkette lautet:Perl tr Operator transkribiert basierend auf dem Namen der Variable nicht ihren Wert
$dlm_count = tr/$dlm//;
Wenn ich das Trennzeichen fest codiere, z. $dlm_count = tr/,//;
die Zählung kommt richtig aus. Aber wenn ich die Variable $ dlm verwende, ist die Anzahl falsch. I modifiziert, um die Anweisung zu sagen
$dlm_count = tr/$dlm/\t/;
und realisiert aus, wie die Zungen in der Zeichenfolge eingefügt wurden, daß der Betrieb jeder Instanz von einem der vier Zeichen „$
“ wurde Substitution „d
“, „l
“, oder "m
" zu \t
- dh eines der vier Zeichen, aus denen mein Variablenname besteht $dlm
.
Hier ist ein Beispielprogramm, das das Problem veranschaulicht:
$_ = "abcdefghij,klm,nopqrstuvwxyz";
my $dlm = ",";
my $dlm_count = tr/$dlm/\t/;
print "The count is $dlm_count\n";
print "The modified string is $_\n";
Es gibt nur zwei Kommas in der $_
Zeichenfolge, aber dieses Programm druckt die folgenden:
The count is 3
The modified string is abc efghij,k ,nopqrstuvwxyz
Warum ist die $dlm
Token wird als eine literale Zeichenfolge von vier Zeichen anstatt als Variablenname behandelt?
Wow, das eine Goldmine von Antworten ist. Danke an alle, die geantwortet haben, ich schätze es sehr. – rbaumann