2017-02-21 10 views
-1

Как назначить 0 скалярной переменной в Perl? Мой код:Назначить переменную нуля для скаляра в Perl

$x=0; 

if(!$x) 
{ 
    print "fail"; 
} 
else 
{ 
    print "pass"; 
} 

Выход: Нормально

+0

Вам нужно напечатать 'pass' – ssr1012

+4

Почему вы ожидаете, что' 0' будет истинным значением? Он считается ложным в Perl. – melpomene

+1

Пожалуйста, не меняйте свой вопрос значительно после того, как вы получили ответы. Из-за вашего редактирования ответ Sobrique больше не имеет смысла, и любой, кто посещает эту страницу в будущем, будет смущен тем, откуда приходит '! X'. Вот почему вы всегда должны копировать и вставлять точный код, который вы используете, или даже лучше, создать [mcve], который воспроизводит вашу проблему. – ThisSuitIsBlackNot

ответ

3

Включите use strict; и use warnings; и скажу вам, что !x неправильно:

Bareword "х" не допускается в то время как «строгие подлодки "in use

Это должно быть ! $x - или по моему желанию e, not $x.

Вы должны ВСЕГДА use strict; и use warnings 'all';.

+5

Откуда появился этот «предупреждающий» all'' meme? Я видел это несколько раз здесь, на SO (но никогда не «в дикой природе»). Я всегда использовал 'use warnings;'. – melpomene

+0

@melpomene мы это делаем, но не «все» из нас. Я, например, не делаю. Но больше предупреждений, чем обычно, не может навредить. – simbabque

+3

@simbabque Странно то, что они идентичны: вы не получаете больше предупреждений с 'use warnings 'all'' ([' perldoc warnings'] (https://metacpan.org/pod/warnings#DESCRIPTION) : «* Все предупреждения включены в блоке одним из этих *»). – melpomene

-1

Итак, он назначается, но вы задаете Perl неправильный вопрос. Вы спрашиваете: «$ x false?» и поскольку нуль равен false в Perl, Perl говорит true. То, что вы хотите знать, это $ x получить нулевой.

use strict; 
use warnings; 

my $x=0; 

if (not defined $x || $x != 0) { 
    print "fail"; 
} else { 
    print "pass"; 
} 

Отпечатано pass.

И, как отмечают мои коллеги, всегда используют use strict; и use warnings; и когда вы сделаете это, вы также должны добавить my перед вашим $x.

Надеюсь, это прояснит ситуацию.

 Смежные вопросы

  • Нет связанных вопросов^_^