在perl中初始化哈希是否可选?

Nik*_*nka 2 perl

$color_of{apple} = "red";
print $color_of{apple}; 
Run Code Online (Sandbox Code Playgroud)

当我甚至没有初始化哈希时,上面的代码是打印红色的.这是perl允许的吗?它会一直编译吗?

我不记得确切的代码,但是当地图未明确初始化时,我得到以下错误.

Global symbol "%map" requires explicit package name at ....
Run Code Online (Sandbox Code Playgroud)

代码链接:http://ideone.com/NJDTUj

sim*_*que 6

你得到那个错误use strict,你应该总是这样做.您还应该始终use warnings打开警告.

它被认为是一种很好的做法,并且称为现代Perl(在Perl 5.08之后或多或少的所有内容,不要引用我),总是有严格的警告.他们确保你没有愚蠢的错误,强制你声明变量,告诉你两次声明它们等等.

因此,答案是,你并不需要申报*任何在Perl的变量,但你应该无论如何做.坦率地说,如果你和其他人一起工作,如果你不这样做,那些人就会讨厌你.

#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';

my %color_of; # no need to put () unless you explicitly want an empty list
$color_of{apple} = 'red';

say $color_of{apple};
Run Code Online (Sandbox Code Playgroud)

*) 声明变量意味着你告诉Perl有一个变量.你这样做my,这使得一个词法变量只存在于一个块内(如a sub或者花括号内部 if (1) { ... }.初始化变量意味着在使用它之前给它一个值.通常这是同时完成的在Perl中声明它.如果你不这样做,变量将是undef,这是完全正常的.


更加严格的方法是use strictures,您需要从CPAN安装.