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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разыменнование скаляров 
:(
    Опции темы
s_a_s_h_a
Дата 6.9.2004, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Случилась такая трабла: мне надо передать функции, например, следующий параметр

картинка1 текст1 картинка2 текст2 (причем картинка - уже результат работы другой функции и
является ссылкой на скаляр).

Передать одну картинку и обработать не проблема, а трабла вот в чем передаю строку
"SCALAR(0x81a3bc4) str1 SCALAR(0x81a3bf4) str2"
регулярными вырыжениями вычленяю SCALAR(....) и пытаюсь их разыменовать. У меня ничего
не получается. Вопрос: если ссылки на скаляр объединяются со строками, то потом из них уже ничего
не получить?
PM MAIL   Вверх
ElectricalStorm
Дата 6.9.2004, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

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



Разименовать скаляр очень просто

Код

$scalar = 1;

$scalar_ref = \$scalar;

$scalar_new = $$scalar_ref;



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
s_a_s_h_a
Дата 6.9.2004, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что такое 1?
PM MAIL   Вверх
ElectricalStorm
Дата 6.9.2004, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

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



число smile.gif

Это сообщение отредактировал(а) ElectricalStorm - 6.9.2004, 16:07


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
s_a_s_h_a
Дата 6.9.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему не 2? smile.gif
Добавлено @ 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";
}

не проходит.

Это сообщение отредактировал(а) s_a_s_h_a - 6.9.2004, 16:19
PM MAIL   Вверх
ElectricalStorm
Дата 6.9.2004, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

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



ок ща

Это сообщение отредактировал(а) ElectricalStorm - 6.9.2004, 16:18


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
s_a_s_h_a
Дата 6.9.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уже
PM MAIL   Вверх
dimes
Дата 6.9.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2s_a_s_h_a
не обижайся но это большой изврат!
может конечно ты делаеш из спортивного интереса smile.gif
но почемубы сразу не передовать разыменоваными?

далее возможно я ошибаюсь но ты стал жертвой молчаливых изменений типов в 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);# "" пустота все верно строка не является ссылкой smile.gif
print $$e;# "" что и требовалось доказать smile.gif

Это сообщение отредактировал(а) dimes - 6.9.2004, 17:38
PM ICQ   Вверх
s_a_s_h_a
Дата 6.9.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если пойму, почему я так делаю, то напишу.
PM MAIL   Вверх
ElectricalStorm
Дата 6.9.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

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



я подумал может получиться от евалить его ... не получиллось... sad.gif

Это сообщение отредактировал(а) ElectricalStorm - 6.9.2004, 17:00


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
s_a_s_h_a
Дата 6.9.2004, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Наверное вот почему. Чтобы вставить картинку в ртф-документ надо ее запихать в
{\pict ... }, а в тексте надо все {,} и \ заменять на \'7b,\'7d и \'5c. Вот. И чтобы
различать где строка, а где картинка, я запихивал картинку в скаляр, а теперь потребовалось
(не мне), чтобы было то что было, написано вверху, и как раньше не проходит.
PM MAIL   Вверх
korob2001
Дата 6.9.2004, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



s_a_s_h_a вам обсолютно верно пояснил dimes
Вот вам простейший тест:
Код

#!/usr/bin/perl -w
use strict;
my $r1 = \100;
my $r2 = \200;

my $ref_to_string = "$r1:$r2";

# Разобъём строку.
my( $ref1, $ref2 ) = split(':', $ref_to_string);

# Проверим содержимое переменных
foreach ( $ref1, $ref2 ) {
              if ( ref( $ref1 ) ) {
                   print "Ссылка\n";
              } else {
                   print "Не ссылка\n";
              }
}

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
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.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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