Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Преобразовать текстовое значение в имя переменной


Автор: BurnerCode 22.5.2008, 10:34
Скажем есть переменные:

Код

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


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

Код

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


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

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


my $temp = '$param;

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


Как сделать что бы значение $temp воспринималось как переменная?

Автор: Bulat 22.5.2008, 11:04
Не совсем понял smile Ты хочешь в $temp сохранить ссылку на $param или что??

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

my $temp = $param; 

Надо писать либо без кавычек (одинарных), либо в двойных
В одинарных интерполяция не происходит и в переменную $temp записывается просто слово $para

Автор: ginnie 22.5.2008, 11:35
Как вариант:

Код

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


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

Автор: BurnerCode 22.5.2008, 11:38
не совсем то

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

Автор: sir_nuf_nuf 22.5.2008, 11:41
Тебе нужны символические ссылки что ли ?

типа такого 

Код

no strict 'refs';

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

print $$name;


выведет "data"


Автор: KSURi 22.5.2008, 11:54
Код

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:\>

Автор: BurnerCode 22.5.2008, 11:56
неполучалось из-за того что переменные были объявлены как 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


Всем спс.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)