Ich stimme JesperE zu, bitte zeigen Sie uns einen Code. Aber soweit ich das sagen kann, das ist, was passiert:
if(-G) {
Perl dies sieht, erkennt nicht -G
, und so behandelt sie als String zurück. Es wird:
if('-G') {
, die gleich ist:
if(1) {
so weit So wie ich sagen kann, if(-G)
nichts tut. Ich habe es versucht, und es scheint immer wieder wahr zu sein, was meine Hypothese unterstützt. Weitere Unterstützung ist aus dem folgenden Code (getestet auf OS X mit Perl 5.10.0):
use strict;
use warnings;
my $var = -G;
print "$var\n";
Zeigt keine Warnungen, kompiliert und ausgeführt, und druckt einfach "-G".
EDIT: Eine Suche ich viel getan haben sollte früher liefert die folgenden von Perldoc der perlop Seite:
Unary „-“ arithmetische Negation führt, wenn der Operand numerisch ist. Wenn der Operand ein Bezeichner ist, wird eine Zeichenfolge zurückgegeben, die aus einem mit dem Bezeichner verketteten Minuszeichen besteht. Andernfalls, wenn die Zeichenfolge mit einem Plus oder Minus beginnt, wird eine Zeichenfolge zurückgegeben, die mit dem umgekehrten Vorzeichen beginnt. Ein Effekt dieser Regeln ist, dass "-barword" der Zeichenkette "-ware" entspricht. Wenn die Zeichenfolge jedoch mit einem nicht alphabetischen Zeichen (ohne "+" oder "-") beginnt, versucht Perl, die Zeichenfolge in eine Zahl umzuwandeln, und die arithmetische Negation wird ausgeführt. Wenn die Zeichenfolge nicht sauber in einen numerischen umgewandelt werden, wird Perl die Warnung Argument geben „die Zeichenfolge“ ist nicht numerisch in Negation (-) an ....
Wie in den Kommentaren erwähnt, B::Deparse
scheint zu zeigen, dass Perl if(-G)
in if(-'G')
konvertiert. Die Dokumentation (und das Verhalten mit print()
) stimmen jedoch mit der Dokumentation überein, die besagt, dass sie if(-G)
in if('-G')
konvertieren soll. Dies ändert das Ergebnis des Programms in keiner Weise.
Allerdings sind subtile Tippunterschiede im Verhalten von unären Operatoren, die 99% der Menschen nur für Zahlen verwenden, nicht das, was ich "grundlegend" nennen würde. Ich glaube nicht, dass irgendjemand die -bareword
zu 'bareword'
Umwandlung in irgendeiner praktischen Situation verwenden sollte (oder jemals brauchen würde).
Ich kann keine Informationen über -G auch nicht finden. Kannst du uns ein Beispiel zeigen? – JesperE
Jemandes Drähte werden hier gekreuzt. – Schwern
Was war die genaue Frage, fragte er Sie? –