2009-12-24 78 views
0

您好我已經閱讀了一些相關的問題似乎不幫助我。 這是一個將解釋我想要什麼的代碼。如何在Perl中使用索引名稱創建新變量?

for ($i=0;$i<5;$i++) { 
    my $new$i=$i; 
    print "\$new$i is $new$i"; 
} 

期待的變量被命名爲$new0$new1$new2$new3$new4$new5。 ,並有能力像使用print命令一樣在循環中使用它們。 感謝

如果你想創建一個像$ newN變量,你可以使用 eval
+6

想知道*爲什麼*或你打算如何使用結果 - 不會有散列就足夠了? –

+5

你爲什麼不使用數組? '@news =(); (...){$ news [$ i] = $ i;打印$ news [$ i]; }' –

+4

鑑於他使用的是數字索引,數組會更好。 –

回答

18

您想用hash or array代替。它允許數據集合保持在一起,並且會減少線路上的痛苦。

my %hash; 
for my $i (0..4) { 
    $hash{$i} = $i; 
    print "\$hash{$i} is $hash{$i}\n"; 
} 
-4

eval("\$new$i=$i"); 

(使用哈希可能會更好)

+15

不需要評估,符號參考更快更安全。 '$ {「new」。$ i} = $ i'。但是,真的,不要這樣做。 – Schwern

11

你能描述一下到底爲什麼,你需要這樣做。 Mark Jason Dominus已經寫了爲什麼在中這樣做並不是一個好主意爲什麼「使用變量作爲變量名」是愚蠢的 part 1,part 2part 3

如果您認爲您的需求對於此處描述的案例是個例外,請讓我們知道在這裏如何和某人可能會有所幫助。

2

改爲使用散列。

my %h=(); 
$new="test"; 
for ($i=0;$i<5;$i++) { 
    $h{"$new$i"}=$i; 
} 
while(my($key, $value) = each(%h)) { 
    print "$key,$value\n"; 
} 
相關問題