Автор Тема: ошибка "not an ARRAY reference"  (Прочитано 4673 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« : 06 Октября 2003, 19:16:58 »
от чего она и как избавиться?
$tema{"Afisha"} = {
"A2" => {
"Ploter" => ["16", "3", "1шт", "10шт", "100шт" ],
"Ofset" => ["17", "3", "500шт", "1000шт", "5000шт" ]
} ,
"A3" => {
"Ploter" => ["18"],
"Printer" => ["19"],
"Ofset" => ["20"]
}
};
$tema{"Vizitki"} = {
"Shelkograf" => ["13"],
"Printer" => ["14"],
"Ofset" => ["15"]
};

foreach (sort {$tema{$a} <=> $tema{$b}} keys %tema) {
if ($tema{$_}[0] =~ /^(\\d+)$/) { print "$tema{$_} - ne"; }
else { print "$tema{$_} - ok"}
}
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #1 : 06 Октября 2003, 20:07:35 »
Отладка программ это хорошая вещь.
Ты получаеш в регулярку не то что думаеш
foreach (sort {$tema{$a} <=> $tema{$b}} keys %tema) {
   print for (keys %{$tema{$_}}); #проверка
   if ($tema{$_}[0] =~ /^(\\d+)$/) { print "$tema{$_} - ne"; }
   else { print "$tema{$_} - ok"}
}
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #2 : 06 Октября 2003, 20:50:57 »
Цитировать
NeoNox:
Ты получаеш в регулярку не то что думаеш

как раз то что нужно то и получаю, а вот почему дальше, вместо того что б написать: А2 - окА3-ок
пишет: not an ARRAY reference .... лайн 23
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #3 : 07 Октября 2003, 10:29:29 »
Yaroslav
Видим "not an ARRAY reference". Берем словарик и переводим - "Это не ссылка на массив". Даже строка указана. Вопросы?
0 OK, 0:1

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #4 : 07 Октября 2003, 13:30:16 »
ondr
NeoNox
:
Спасибо, я думал что мой вариант тоже должен работать, а он гад...
выходит что самый оптимальный вариант этот:
foreach (sort {$tema{$a} cmp $tema{$b}} keys %tema) {
for (keys %{$tema{$_}} ) {
if ($_ =~ /^(\\d+)$/) { print "$_ -ne\\n" }
else { print "$_ -ok\\n"}
}
}
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #5 : 07 Октября 2003, 14:25:43 »
Yaroslav
Ну зачем же так пугаться и убегать от проблемы?
Как я понял она состоит в том, что ты путаешься при разыменовании ссылок?
Если так, то давай я выложу несколько вариантов для твоего примера:

%{$tema{Afisha}} - разыменование ссылки
$tema{Afisha}->{A2} - доступ к конкретному элементу

%{$tema{Afisha}->{A2}}
$tema{Afisha}->{A2}->{Ploter}

@{$tema{Afisha}->{A2}->{Ploter}}
$tema{Afisha}->{A2}->{Ploter}->


Теперь разберешься?
0 OK, 0:1

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #6 : 07 Октября 2003, 15:19:20 »
Цитировать
ondr:
Ну зачем же так пугаться и убегать от проблемы?

да вроде я и не убегал, просто вариант который работает :)
мне нужен конечный вариант:
выводить ключ хеша
если значение[0] не цыфра - при нажатии на ссылку перейти на уровень дальше данного хеша
иначе - при нажатии на ссылку перейти к заполнению
Цитировать
ondr:
Как я понял она состоит в том, что ты путаешься при разыменовании ссылок?

как сказать, вроде не путаюсь, хотя после фразы "разыменовании ссылок" (которую слышу в первые) начал хаотично листать книгу :insane:
Цитировать
ondr:
Если так, то давай я выложу несколько вариантов для твоего примера:

вот тут то я и запутался. это ты показал как оно устроено или как
"разыменовывать ссылки" что б не уходить от проблемы? :confused:

как было написано в книге что то типа:
- если вы не разобрались с хешем, вы Перл не знаете :(
« Последнее редактирование: 07 Октября 2003, 15:25:43 от Yaroslav »
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #7 : 07 Октября 2003, 15:39:00 »
Yaroslav
У тебя есть структура данных.
Я лишь показал как с ней работать.

Прочитай все что найдешь про ссылки.
Если этого будет мало, сообщи. Передам тебе PDF какой-нибудь на русском.

А вообще совет: Сходи на рынок какой нибудь и посмотри компакт диски с перлом. На них часто кладут много много хорошей документации.
0 OK, 0:1

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #8 : 07 Октября 2003, 17:07:24 »
Цитировать
ondr:
Теперь разберешься?

типа понял!!!
мне нужно проверить является значение масивом или хешем :)
а как это проверить?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
ошибка "not an ARRAY reference"
« Ответ #9 : 07 Октября 2003, 17:13:04 »
print \'Это хЭШ! :D \' if ref $ref eq \'HASH\';

perldoc -f ref
0 OK, 0:1

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28