Perl 在哈希元素中使用未初始化的值$\u

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

这是关于我在运行Perl脚本时收到的警告消息

我理解收到此警告的原因:可能是因为调用
$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
不正确,为了给出一个正确的例子,了解你实际上在做什么是很有用的。请不要这样删除你的帖子。该网站的工作原理是允许其他人返回并搜索其他问题。如果原始问题被删除,那么上下文也会被删除。