Perl 在哈希元素中使用未初始化的值$\u
这是关于我在运行Perl脚本时收到的警告消息 我理解收到此警告的原因:可能是因为调用Perl 在哈希元素中使用未初始化的值$\u,perl,hash,compilation,syntax-error,element,Perl,Hash,Compilation,Syntax Error,Element,这是关于我在运行Perl脚本时收到的警告消息 我理解收到此警告的原因:可能是因为调用$element时未定义,但我看不到它 for ( my $element->{$_}; @previous_company_names; ) { map { $element => $previous_company_names->{$_} } 0 .. $previous_company_names; 结果就是这个消息 Use of uninitialize
$element
时未定义,但我看不到它
for ( my $element->{$_}; @previous_company_names; ) {
map { $element => $previous_company_names->{$_} }
0 .. $previous_company_names;
结果就是这个消息
Use of uninitialized value $_ in hash element
首先也是最重要的一点——对于一个新的程序员来说,你必须做的最重要的事情就是
使用strict代码>和使用警告代码>。这里有my
,这表明您可能是,但重新迭代是值得的
$是一个特殊变量,称为隐式变量。在for循环中,以这样的方式使用它是没有意义的。看一看,了解更多细节
事实上,我建议你完全避开map
,直到你真正摸索它,因为这是一个很好的迷惑自己的方法
使用for
(或foreach
)循环,您可以:
for my $thing ( @list_of_things ) {
print $thing;
}
或者你可以:
for ( @list_of_things ) {
print $_;
}
第二个循环的每次迭代都会隐式地设置$\uu
,这非常有用,因为很多东西默认使用它
例如
说到-map,它是一个聪明的小函数,可以让您为列表中的每个元素计算代码块。就我个人而言,我仍然对此感到困惑,而且大多数时候倾向于坚持使用for
或foreach
循环
但是你用它做的事情,实际上是行不通的-map
make-hash
比如:
use Data::Dumper;
my %things = map { $_ => 1 } 1..5;
print Dumper \%things;
这将创建哈希“things”:
$VAR1 = {
'1' => 1,
'3' => 1,
'5' => 1,
'4' => 1,
'2' => 1
};
同样地,$\uuuz
在内部使用,因为它是一个神奇的变量-它被设置为“第二位中的任何内容”(例如1,2,3,4,5)每个循环,然后对块进行求值
所以你的表达式没有什么意义,因为你没有定义$element
。。。即使你这样做了,你也会重复地覆盖它
我还要注意-$previous\u company\u names
需要是数字,并且与@previous\u company\u names
没有任何关系。您可能想使用$#以前的公司名称
,这是最后一个元素索引 首先也是最重要的——对于一个新程序员来说,你必须做的最重要的事情就是严格使用代码>和使用警告代码>。这里有my
,这表明您可能是,但重新迭代是值得的
$是一个特殊变量,称为隐式变量。在for循环中,以这样的方式使用它是没有意义的。看一看,了解更多细节
事实上,我建议你完全避开map
,直到你真正摸索它,因为这是一个很好的迷惑自己的方法
使用for
(或foreach
)循环,您可以:
for my $thing ( @list_of_things ) {
print $thing;
}
或者你可以:
for ( @list_of_things ) {
print $_;
}
第二个循环的每次迭代都会隐式地设置$\uu
,这非常有用,因为很多东西默认使用它
例如
说到-map,它是一个聪明的小函数,可以让您为列表中的每个元素计算代码块。就我个人而言,我仍然对此感到困惑,而且大多数时候倾向于坚持使用for
或foreach
循环
但是你用它做的事情,实际上是行不通的-map
make-hash
比如:
use Data::Dumper;
my %things = map { $_ => 1 } 1..5;
print Dumper \%things;
这将创建哈希“things”:
$VAR1 = {
'1' => 1,
'3' => 1,
'5' => 1,
'4' => 1,
'2' => 1
};
同样地,$\uuuz
在内部使用,因为它是一个神奇的变量-它被设置为“第二位中的任何内容”(例如1,2,3,4,5)每个循环,然后对块进行求值
所以你的表达式没有什么意义,因为你没有定义$element
。。。即使你这样做了,你也会重复地覆盖它
我还要注意-$previous\u company\u names
需要是数字,并且与@previous\u company\u names
没有任何关系。您可能想使用$#以前的公司名称
,这是最后一个元素索引 您试图用这个代码片段实现什么。我认为你使用的$\uuu
不正确,为了给出一个正确的例子,了解你实际上在做什么是很有用的。请不要这样删除你的帖子。该网站的工作原理是允许其他人返回并搜索其他问题。如果原始问题被删除,那么上下文也会被删除。您试图用这个代码片段实现什么。我认为你使用的$\uuu
不正确,为了给出一个正确的例子,了解你实际上在做什么是很有用的。请不要这样删除你的帖子。该网站的工作原理是允许其他人返回并搜索其他问题。如果原始问题被删除,那么上下文也会被删除。