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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразовать текстовое значение в имя переменной 
V
    Опции темы
BurnerCode
Дата 22.5.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Скажем есть переменные:

Код

my $param = 'HelloMoto';
my $string = '1 Motorola KRZR K1';


Я хочу заменить текст в переменной string на текст в переменной $param

Код

$string =~ s/1/$param/; # это работает


Но вопрос в следующем:

есть переменная которая которая хранит имя $param:
Код


my $temp = '$param;

$string =~ s/1/$temp/; # это уже не работает


Как сделать что бы значение $temp воспринималось как переменная?
PM MAIL   Вверх
Bulat
Дата 22.5.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Не совсем понял smile Ты хочешь в $temp сохранить ссылку на $param или что??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
DaemonSuw
Дата 22.5.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не совсем понял вопроса!
Ты просто хочешь скопировать в $temp переменную?
тогда просто
Код

my $temp = $param; 

Надо писать либо без кавычек (одинарных), либо в двойных
В одинарных интерполяция не происходит и в переменную $temp записывается просто слово $para
PM MAIL ICQ   Вверх
ginnie
Дата 22.5.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Как вариант:

Код

my $test = 'test string with $param';
my $param = 'substitution';
warn eval('"'.$test.'"');


но я бы пересмотрел логику работы программы, чтобы избежать подобных подстановок.

Это сообщение отредактировал(а) ginnie - 22.5.2008, 11:36


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
BurnerCode
Дата 22.5.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



не совсем то

ps: мне проста интересен этот момент.

Это сообщение отредактировал(а) BurnerCode - 22.5.2008, 11:39
PM MAIL   Вверх
sir_nuf_nuf
Дата 22.5.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тебе нужны символические ссылки что ли ?

типа такого 

Код

no strict 'refs';

$name = 'container';
$container = 'data';

print $$name;


выведет "data"




--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
KSURi
Дата 22.5.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 20
Всего: 27



Код

C:\>perl -e"($a,$b,$_)=('$b','test','hello');s/$_/$a/ee;print"
test
C:\>


Добавлено через 1 минуту и 47 секунд
Или действительно, сим. ссылки, как предложил sir_nuf_nuf:
Код

C:\>perl -e"($a,$b,$_)=('b','test','hello');s/$_/$$a/;print"
test
C:\>



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
BurnerCode
Дата 22.5.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



неполучалось из-за того что переменные были объявлены как my

Код

#!/usr/bin/perl
#use strict;
#use warnings;

no strict 'refs';

$string = '1 Motorola KRZR K1';
$nwtext = 'HelloMoto';
$ref    = 'nwtext';

$string =~ s/1/$$ref/;

print $string


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


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

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


 




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


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

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