2011-11-16 109 views
0

我使用Perl,我想在循環中創建變量。所以每個循環都會爲我創建一個具有不同數值的變量。 例如 第一個環路將創建:如何在Perl中使用for循環創建變量?

num1 = x; 

第二環路將創建

num2 =x; 

感謝您的幫助

回答

6

使用一個陣列,並添加了一些每一次迭代。

my @nums; 

for (1..10) { 
    push @nums, $_; # your `x' 
} 
+0

有沒有辦法做到這一點沒有數組? – adir

+7

@adir - 是的,但它是邪惡的,不合邏輯的,愚蠢的,緩慢的,也是調試的噩夢。這正是陣列設計的目的。 – Quentin

+0

@Quentin - 謝謝 – adir

6

如果你真的需要他們,那麼哈希應該做的一樣好。我不要推薦這個,但你可以做到這一點。我只是向你展示如何以系統的方式「命名」事物,就像你使用一流的變量一樣。

my %hash; 
my $i = 0; 
for (@list) { 
    $hash{ 'num' . ++$i } = $_; 
} 

再次,這是相當無意義的號碼根據自己的訂單時的陣列有類似的功能,再加上你永遠不必擔心字典順序的方式獲得。

因此,您應該考慮通過命名變量來解決您試圖解決的問題,以便確定這是否是最佳方式。


我剛剛回想起我所做的,當我想輸入儘可能少的標量語法。它依賴於*_是一個glob,但GLOB中沒有使用某些插槽。

所以你可以使用local %_;

因此僅存在額外的字符與任何這種類型的僞變量的輸入:

$_{num001} += 43; 

當然,這是你必須鍵入

的多餘的字符相同的量
$v{num001} += 43; 

以及。

+0

雖然sprintf使它看起來有些過於複雜,但我原則上同意:如果您需要將命名數據添加到以後要使用的知識池中,請使用散列。如果您需要一組有序的數據,請使用數組。 –

+0

@JoelBerger,通過lex命令(通常在其他人的代碼中)有足夠的插入,對於我來說,使用'sprintf'格式規範連接字符串和數字是我的第二天性。 – Axeman

相關問題