Я согласен с JesperE, пожалуйста, покажите нам код. Однако, насколько я могу судить, так и происходит:
if(-G) {
Perl видит это, не распознает -G
и поэтому воспринимает это как строку. Становится:
if('-G') {
Что эквивалентно:
if(1) {
Итак, насколько я могу судить, if(-G)
ничего не делает. Я пытался использовать его, и всегда кажется, что он возвращает true, что подтверждает мою гипотезу. Дальнейшая поддержка из следующего кода (протестировано на OS X с Perl 5.10.0):
use strict;
use warnings;
my $var = -G;
print "$var\n";
Не выводит предупреждений, компилирует и запускает, а печатает просто «-G».
РЕДАКТИРОВАТЬ: Выполнение поиска, который я должен был сделать намного раньше, предоставляет следующее со страницы perlop в Perldoc:
Unary "-" выполняет арифметическое отрицание, если операнд числовой. Если операнд является идентификатором, возвращается строка, состоящая из знака минус, соединенного с идентификатором. В противном случае, если строка начинается с плюса или минуса, возвращается строка, начинающаяся с противоположного знака. Одним из следствий этих правил является то, что -bareword эквивалентно строке "-bareword". Однако, если строка начинается с неалфавитного символа (исключая «+» или «-»), Perl попытается преобразовать строку в числовое значение и выполнить арифметическое отрицание. Если строка не может быть чисто преобразована в числовое значение, Perl выдаст предупреждение Аргумент "строка" не является числовым в отрицании (-) в ....
Как указано в комментариях, B::Deparse
, кажется, показывает, что Perl преобразует if(-G)
в if(-'G')
. Однако документация (и поведение с print()
) согласуются с документацией, в которой говорится, что она должна конвертировать if(-G)
в if('-G')
. Это никак не повлияет на результат программы.
Однако тонкие различия в типах поведения унарных операторов, которые 99% людей будут когда-либо использовать только для чисел, не являются тем, что я бы назвал «базовым». Я не думаю, что кто-либо должен (или должен был бы) использовать преобразование -bareword
в 'bareword'
в любой практической ситуации.