Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как определить, является ли скаляр ссылкой?


Автор: Andrey1 23.4.2004, 15:09
Допустим есть массив @a, элементами которого являются:
либо string;
либо reference на другой массив такой же структуры.

Как определить является ли $a[i] ссылкой на другой массив?


Спасибо.


---

Пробую "teach myself Perl" за 24 часа
biggrin.gif

Автор: korob2001 23.4.2004, 15:38
Код

ref( $a[$i] ) ? print "Скаляр является ссылкой\n"
              : print "Скаляр не является ссылкой\n";

или так
Код

if ( ref( $a[$i] ) ) {
    print "Скаляр является ссылкой\n";
} else {
    print "Скаляр не является ссылкой\n";
}

Автор: Andrey1 23.4.2004, 15:47
А почему не работает:
Код
if (ref( $a[$i]) == '') ...  
?

Автор: korob2001 23.4.2004, 16:19
Цитата

А почему не работает?

А какова цель?
В таком условии нет логики, блок if никогда не будет выполнен. Мы ставим условие если скаляр $a[$i] есть ссылка, а затем проверяем этот скаляр не равен ли он пустой строке. Такое условие не может быль истинным. Скаляр неможет быть одновременно ссылкой и пустой строкой.
При этом оператор сванения для строк в Perl выглядит вот так: eq

Автор: Andrey1 23.4.2004, 17:05
Ясно. А я думал, что ref возвращает строку:
Код
my $r=ref($a[$i]); print "a[i] is $r";


Спасибо за ответы.

Автор: korob2001 23.4.2004, 17:19
Цитата

А как узнать, куда указывает $a[$i]? $a[$i][0], такое впечатление, что не работает как хотелось бы.

Пробуй так:
Код

print $$a[$i]; # Если ссылка на скаляр

или
Код

print $a[$i]->[1]; # Если ссылка на массив


Если не подойдёт, напиши как выглядит массив на который ссылается скаляр $a[$i] и как выглядит массив @a.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)