2011-11-16 110 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

相关问题