2013-10-14 2 views
1

Что это значит в Perl?Что делать, если (@array) означает perl?

  1. if (@array)
  2. if ([email protected])

Означает ли это, если мы задаем Perl, чтобы проверить, если массив существует или нет?

Благодаря

+4

Невозможно, чтобы существовал массив, который не существует – ysth

+0

@ysth: Следствием этого является * «каждый массив уже существует» *, что является бессмыслицей. Очень просто написать программу, которая ссылается на необъявленную переменную. Если 'use strict 'vars'' действует, то perl предотвратит запуск программы, или если нет, то переменная будет создана для целей ссылки. В любом случае массив не существовал до его упоминания. – Borodin

+2

нет, следствием является «каждый упомянутый массив, существует», что верно. («объявлено» является отдельной проблемой) – ysth

ответ

11

Массив в скалярном контексте возвращает количество элементов. Таким образом, if(@array) проверяет, есть ли у массива какие-либо элементы или нет. Это похоже на if(scalar(@array)!=0).

4

if(@array) будет справедливо, если @array имеет, по меньшей мере, один элемент.

my @array; 
if ([email protected]) { print "empty array\n"; } 
push @array, 11; 
if (@array) { print "array has at least one element\n"; } 
8

В Perl массив в скалярном контексте оценивает количество элементов в массиве. Так

my @array = ('a', 'b'); 
my $n = @array; 

наборы $n до 2.

Кроме того, if применяет скаляр контекст параметра. Так

my @array = ('a', 'b'); 
if (@array) { ... 

такая же, как

if (2) { ... 

и, поскольку 2 считается истинным, тело ifбудет получить казнены.

Наконец, единственное число, которое считает Perl быть ложным равна нулю, так что если вы передаете пустой массив

my @array =(); 
if (@array) { ... 

это то же самое, как

if (0) { ... 

и тело ifне будет получить исполнение.

Невозможно обнаружить, существует ли переменная в Perl. Пока вы use strict, который вам всегда должен, Perl не позволит вам запускать программу, которая ссылается на несуществующие переменные.

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