如何解决perl中"标量的实验值现在被禁止"的问题

geo*_*rea 1 perl

在Perl 5.26.2中我得到:

Experimental each on scalar is now forbidden at a.plx line 67.
Type of arg 1 to each must be hash or array (not private variable) at a.plx   
line 67, near "$val)"
Execution of a.plx aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

第67行是其中的

 67 while (my ($ip, $val2) = each($val))
 68 {
       ......
    }
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

each采用哈希,而不是引用.[1]因此,

while (my ($ip, $val2) = each($val))
Run Code Online (Sandbox Code Playgroud)

应该

while (my ($ip, $val2) = each(%$val))
Run Code Online (Sandbox Code Playgroud)
  1. Perl 5.12,5.14和5.16允许使用引用.这是一个错误.

    Perl 5.18,5.20和5.22仍允许它,但警告你是否这样做.

    Perl 5.24还原了这个添加.

  • 你可以使用它,但大多数人发现它只是发现它更吵.请参阅"您应该使用哪个?" [这个答案]部分(/sf/answers/3084201571/)(在底部). (2认同)