有这样的东西
my $labels = {
1 => 'One', 2 => 'Two',
3 => 'Three', 4 => 'Four',
5 => 'Five', 6 => 'Six',
7 => 'Seven', 8 => 'Eight',
9 => 'Nine', 10 => 'Ten',
};
我想在带有变量的“For-Loop”中生成相同的东西。
my $labels;
my @dData = ( "One" , "Two", "dynamic Data", .. );
my $index = @ddData;
for(my $i = 0; $i < $index; $i++){
$labels{$i} = $dData[$i];
}
但结果总是如此:
Use of uninitialized value $labels in concatenation (.) or string
答案 0 :(得分:2)
这里有三个主要错误
您的数组名为dData
,而不是ddData
。您应该在每个程序的开头始终 use strict
和use warnings
。这个简单的措施可以解决你的错误
您的索引$i
从零开始,但似乎您希望您的哈希键从一个开始
要通过引用访问哈希,您需要使用间接运算符
解决这些问题
use strict;
use warnings;
my $labels;
my @dData = ( "One" , "Two", "dynamic Data");
my $index = @dData;
for (my $i = 0; $i < $index; $i++) {
$labels->{$i+1} = $dData[$i];
}
use Data::Dump;
dd $labels;
<强>输出强>
{ 1 => "One", 2 => "Two", 3 => "dynamic Data" }
枚举循环元素也好得多,而不是使用C风格的for
循环。这可以更好地写成
$labels->{$_+1} = $dData[$_] for 0 .. $#dData;
答案 1 :(得分:1)
您发布的代码未使用use strict;
进行编译,并且应该为您提供其他警告(例如,您在一行中使用@dData
,在下一行中使用@ddData
)。我会使用以下内容:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $hashref;
my @data = qw(One Two Three Four);
foreach my $i (0 .. $#data) {
$hashref->{$i+1} = $data[$i];
}
print Dumper $hashref;
$VAR1 = {
'4' => 'Four',
'1' => 'One',
'3' => 'Three',
'2' => 'Two'
};