2013-07-31 2 views
0
my $pass = !$message; 

Я столкнулся с этим кодом perl, где $ message - это строка, а $ pass - логическое значение. что будет проверяться, какПерл не строки равен?

ok ($pass, $test) 

Я смущен, что это не (!) в $ сообщении?
Как это транслируется до логического значения?

пустая строка False и непустая строка - это правда?

+1

related: http://stackoverflow.com/questions/1134962/why-does-1-give-me-nothing-in-perl – geoffspear

+0

В дополнение к ответам вы можете искать «булевский контекст». 'perldoc perldata' имеет некоторую информацию об этом ... – user1146332

ответ

6

! - это унарный оператор логического отрицания. Ложные строки: "" и "0". Если такая строка логически отрицается, это оценивается как 1. Все остальные строки истинны. Отрицанием является "" (пустая строка) или численно 0.

Другие ложные значения: undef и номер 0.

Следовательно, ok ($pass, $test) будет проходить, если $message не определено, пустая строка или ноль.

+0

это может быть неуместно, но тогда, если я делаю $ pass = $ message, тогда $ pass сохраняет логическое значение $ message или фактическую строку? логически говоря, я предполагаю, что он просто сохранит текст сообщения $, и когда будет выполнено ok ($ pass, $ test), $ pass будет рассматриваться как boolean, т.е. true, если не пуст. – ealeon

+1

@ealeon Ваше понимание верное. Оператор присваивания '=' копирует значение (строки). Если вы хотите явно bool-ify любое значение, используйте двойное отрицание: 'my $ bool = !! $ Foo'. – amon

5

Это точно. В perl следующие пункты являются «ложными»:

0 
'' 
'0' 
undef 

Все остальное верно. Итак, если $message не является ни пустым, ни неопределенным, либо '0', то $message истинно, а !$message является ложным.

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