2016-01-02 5 views
1

НапримерКак я могу присвоить содержимое переменной имени переменной в perl?

$get = <>; 
chomp($get); 
$$get = "something"; 

если вводится имя пользователя для $ получить Я хочу, чтобы назначить «что-то» до $ назвать

+2

Что вы ищете является словарь (так называемый «хэш» в Perl). См. [This SO post] (http://stackoverflow.com/questions/19923585/how-to-parse-a-key-value-based-dictionary-using-perl) – Arc676

+3

http://perl.plover.com/ varvarname.html – Sobrique

ответ

4

«хэш» (или «словарь» на некоторых других языках), как * массив пар ключ-значение. Это позволяет получить то, что вы описываете, потому что вы можете присвоить значение переменной без фиксированного идентификатора для этой переменной.

*: Хеши не массивы.

См. this tutorial on Perl101. Следующие фрагменты кода в этом ответе взяты с этого сайта.

Вы можете создать хэш, используя следующий синтаксис:

my %stooges = (
    'Moe', 'Howard', 
    'Larry', 'Fine', 
    'Curly', 'Howard', 
    'Iggy', 'Pop', 
); 

доступ и изменять значения с помощью {}. Вы можете использовать этот синтаксис для и добавить.

print $stooges{'Iggy'}; #get existing 
$stooges{'Iggy'} = 'Ignatowski'; #Overwrite 
$stooges{'Shemp'} = 'Howard'; #Set new 

Вы можете удалить пары ключ-значение с помощью функции delete.

delete $stooges{'Curly'}; 

Вы можете получить список значений или ключей, используя те же самые (ключевые) слова:

my @stooge_first_names = keys %stooges; 
my @stooge_last_names = values %stooges; 
+3

Было бы более распространено писать ваш хэш как разделитель 'fat comma' '=>'. Означает одно и то же, но делает пары с ключом полезными. – Sobrique

+0

Ну, я надеялся, что посетители перейдут по ссылке, так как там упомянут жирный стиль запятой. Я не знал, что это было более распространено, хотя, – Arc676

+0

* «Хэши не массивы» * зачем упоминать массивы в первую очередь? – Borodin

6

Есть способы сделать это, но вы действительно не должны. Вместо этого используйте хэш.

use strict; 
use warnings; 

my $get = <>; 
chomp $get; 
my %input; 
$input{$get} = "something"; 
Смежные вопросы