| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Разыменнование скаляров |
| Автор: s_a_s_h_a 6.9.2004, 15:48 |
| Случилась такая трабла: мне надо передать функции, например, следующий параметр картинка1 текст1 картинка2 текст2 (причем картинка - уже результат работы другой функции и является ссылкой на скаляр). Передать одну картинку и обработать не проблема, а трабла вот в чем передаю строку "SCALAR(0x81a3bc4) str1 SCALAR(0x81a3bf4) str2" регулярными вырыжениями вычленяю SCALAR(....) и пытаюсь их разыменовать. У меня ничего не получается. Вопрос: если ссылки на скаляр объединяются со строками, то потом из них уже ничего не получить? |
| Автор: ElectricalStorm 6.9.2004, 16:06 | ||
Разименовать скаляр очень просто
|
| Автор: s_a_s_h_a 6.9.2004, 16:07 |
| А что такое 1? |
| Автор: ElectricalStorm 6.9.2004, 16:07 |
| число |
| Автор: s_a_s_h_a 6.9.2004, 16:08 |
| А почему не 2? Добавлено @ 16:11 Понял. Это был глобальный пример. Но у меня тяжелый случай у меня не просто ссылка на скаляр, а строка содержащая ссылки на скаляры и символы. Вот. Добавлено @ 16:16 my $str="SCALAR(0x81a3bc4) lalala SCALAR(0x81a3bf4) tytyty"; my @mas=($str =~ /(SCALAR\(0x[0-9a-f]+\))/g); for my $i (@mas) { print "${$i}\n"; print "$$i\n"; } не проходит. |
| Автор: ElectricalStorm 6.9.2004, 16:16 |
| ок ща |
| Автор: s_a_s_h_a 6.9.2004, 16:18 |
| Уже |
| Автор: dimes 6.9.2004, 16:38 |
| 2s_a_s_h_a не обижайся но это большой изврат! может конечно ты делаеш из спортивного интереса но почемубы сразу не передовать разыменоваными? далее возможно я ошибаюсь но ты стал жертвой молчаливых изменений типов в perl например: @q=qw(q w e); print (1+@q);# будет 4 Коментарии нужны? твой пример: $q=1; $w=\$q; # Ссылка на скаляр print $w;# SCALAR(0x155f098) например print ref($w);# SCALAR все ok print $$w;# 1 все правильно $e="$w";# Вот проблемма $w развернется как строка и как строка будет закинута в $e print $e;# SCALAR(0x155f098) но это уже не ссылка а просто строка print ref($e);# "" пустота все верно строка не является ссылкой print $$e;# "" что и требовалось доказать |
| Автор: s_a_s_h_a 6.9.2004, 16:48 |
| Если пойму, почему я так делаю, то напишу. |
| Автор: ElectricalStorm 6.9.2004, 17:00 |
| я подумал может получиться от евалить его ... не получиллось... |
| Автор: s_a_s_h_a 6.9.2004, 17:03 |
| Наверное вот почему. Чтобы вставить картинку в ртф-документ надо ее запихать в {\pict ... }, а в тексте надо все {,} и \ заменять на \'7b,\'7d и \'5c. Вот. И чтобы различать где строка, а где картинка, я запихивал картинку в скаляр, а теперь потребовалось (не мне), чтобы было то что было, написано вверху, и как раньше не проходит. |
| Автор: korob2001 6.9.2004, 17:10 | ||
| s_a_s_h_a вам обсолютно верно пояснил dimes Вот вам простейший тест:
Удачи. |