散列只是一个键值对的列表。有一个语法结构来帮助区分键和值。它被称为“胖箭头”=>
。该构造将左手参数强制为一个字符串,然后转换为简单的逗号。
这是你的意思写:
perl -MO=Deparse -e'$s = { a => 1 }'
$s = {'a', 1};
-e syntax OK
这是你实际写道:
perl -MO=Deparse -e'$s = { a = 1 }'
Can't modify constant item in scalar assignment at -e line 1, near "1 }"
-e had compilation errors.
$s = {'a' = 1};
这就是为什么我会建议你总是启动一个启用了警告的Perl程序。
perl -w -MO=Deparse -e'$s = { a = 1 }'
Unquoted string "a" may clash with future reserved word at -e line 1.
Can't modify constant item in scalar assignment at -e line 1, near "1 }"
-e had compilation errors.
BEGIN { $^W = 1; }
$s = {'a' = 1};
perl -w -MO=Deparse -e'$s = { a => 1 }'
Name "main::s" used only once: possible typo at -e line 1.
BEGIN { $^W = 1; }
my $s = {'a', 1};
-e syntax OK
最后一个例子说明,为什么你还应该use strict
。
perl -w -Mstrict -MO=Deparse -e'$s = { a => 1 }'
Global symbol "$s" requires explicit package name at -e line 1.
-e had compilation errors.
BEGIN { $^W = 1; }
use strict 'refs';
${'s'} = {'a', 1};
我应该尝试使用它之前已经宣布$s
:
perl -w -Mstrict -MO=Deparse -e'my $s = { a => 1 }'
BEGIN { $^W = 1; }
use strict 'refs';
my $s = {'a', 1};
-e syntax OK
这就是为什么我总是下手了我的Perl程序:
use strict;
use warnings;
哪一条是12号线? – Space 2010-05-18 08:33:56
_ldap = $ ldap_obj, – joe 2010-05-18 08:47:46
'use strict;使用警告;' – Ether 2010-05-18 16:09:38