我从这里学习Perl脚本.我在创建Hash时遇到问题.代码在这里:
print "Hello World!\n";
@days = ("1", "2");
print "There are $#days days\n";
print "1 is $days[0]\n";
%months = ("a" => 1, "b" => 2, "c" => 3);
print "There are $#months keys\n";
print "a is $months[0]\n";
for $i (keys %months)
{ print "$i has value $months[$i].\n"}
Run Code Online (Sandbox Code Playgroud)
现在它与阵列一起工作正常.但对于哈希来说,它的印刷品是"有-1键".此外,它不会为最后打印调用的变量值打印任何内容.
您正在哈希上使用数组语法,这根本不符合您的想法.您正在操作一个名为的数组,而不是对您的哈希进行操作@months.例如:
print "There are $#months keys\n";
Run Code Online (Sandbox Code Playgroud)
这将查找数组@months,看它是空的,并愉快地打印-1.
当你这样做
for $i (keys %months) {
print "$i has value $months[$i].\n"
}
Run Code Online (Sandbox Code Playgroud)
Perl将尝试将键转换a,b并c以数字,这将是0.这将发出警告:
Argument "a" isn't numeric in array element ...
Run Code Online (Sandbox Code Playgroud)
然后它将打印空数组元素$month[0].这将发出未定义的值警告.你没有得到这些警告,因为你没有使用
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
在你的脚本中.strict会告诉你@months还没有宣布,并立即停止了这个错误.
您应该使用的语法是:
print "There are " . (keys %months) . " keys\n";
...
print "$i has value $months{$i}\n";
Run Code Online (Sandbox Code Playgroud)