Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить, является ли скаляр ссылкой? Нужно дерево вывести... 
:(
    Опции темы
Andrey1
  Дата 23.4.2004, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: нет
Всего: 5



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

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


Спасибо.


---

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

Это сообщение отредактировал(а) Andrey1 - 23.4.2004, 15:33


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
korob2001
Дата 23.4.2004, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Код

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

или так
Код

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


Это сообщение отредактировал(а) korob2001 - 23.4.2004, 15:43


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Andrey1
Дата 23.4.2004, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: нет
Всего: 5



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

Это сообщение отредактировал(а) Andrey1 - 23.4.2004, 15:48


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
korob2001
Дата 23.4.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата

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

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

Это сообщение отредактировал(а) korob2001 - 23.4.2004, 16:54


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Andrey1
Дата 23.4.2004, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: нет
Всего: 5



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


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

Это сообщение отредактировал(а) Andrey1 - 23.4.2004, 17:16


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
korob2001
Дата 23.4.2004, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата

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

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

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

или
Код

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


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

Это сообщение отредактировал(а) korob2001 - 23.4.2004, 17:21


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.