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


Автор: andryas 7.10.2010, 09:12
Здравстуйте. Никак не получается решить следующую задачу:

Через STDIN поступает текст в формате:

ИМЯ_ПЕРЕМЕННОЙ_1:ЗНАЧЕНИЕ_1
ИМЯ_ПЕРЕМЕННОЙ_2:ЗНАЧЕНИЕ_2
....
ИМЯ_ПЕРЕМЕННОЙ_N:ЗНАЧЕНИЕ_N

Необходимо создавать переменные с именем "ИМЯ_ПЕРЕМЕННОЙ" и присваивать им значения "ЗНАЧЕНИЕ". Возможно ли такое?

Автор: Logo 7.10.2010, 09:20
Возможно, но скорее всего вам нужен хеш

Код

my %hash;
$hash{name} = 'qwe';
print $hash{name};

Автор: Jimy 7.10.2010, 09:37
Цитата(Logo @ 7.10.2010,  09:20)
Возможно

Не покажите пример реализации?

Автор: sir_nuf_nuf 7.10.2010, 09:40
Код

while (<>) {
  my ($k, $v) = split ':', $_, 2;
  $hash{$k} = $v;
}

Автор: andryas 7.10.2010, 09:46
Цитата(Logo @  7.10.2010,  09:20 Найти цитируемый пост)
вам нужен хеш


Спасибо, действительно подходит.  Но пример с созданием переменной тоже интересует smile

sir_nuf_nuf

Спасибо большое, точно так же реализовал smile

Автор: Egik2 7.10.2010, 10:38
Пример кода:
Код

#!/usr/bin/perl

my $var="hello";
$$var = "bye!";
print("$hello");


Весь сок в $$var="hello";


Автор: vadiml 7.10.2010, 10:45
Можно и переменные, через ссылки, посмотрите в camelbook главу "Ссылки", часть "символические ссылки".

если кратко:
no strict 'refs';

${'varname'} = 'varbody';
print $varname;

Автор: andryas 7.10.2010, 10:46
Спасибо всем, задача успешно решена с использованием хеша.

Автор: Jimy 7.10.2010, 13:33
Цитата(Egik2 @ 7.10.2010,  10:38)
Код

my $var="hello";
$$var = "bye!";
print("$hello");


Четно, не ожидал что такая конструкция сработает. Точнее даже наоборот, был уверен что не сработает, поэтому даже не попробовал smile

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