我有这个导致问题的Perl子例程:
sub new
{
my $class = shift;
my $ldap_obj = Net::LDAP->new( 'test.company.com' ) or die "$@";
my $self = {
_ldap = $ldap_obj,
_dn ='dc=users,dc=ldap,dc=company,dc=com',
_dn_login = 'dc=login,dc=ldap,dc=company,dc=com',
_description ='company',
};
# Print all the values just for clarification.
bless $self, $class;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题:
我收到此错误无法修改Core.pm第12行,"$ ldap_obj"附近的标量赋值中的常量项
Axe*_*man 11
既然你不使用"胖逗号"(=>),在左边的下划线的名字都没有得到自动报价,因此,无印记('$','@',或'%'),他们只能子程序名.由于你还没有声明这些subs,perl将它们作为常量,并告诉你不能分配给常量(或子调用).
正确的解决方法是将您的分配更改为双箭头
_ldap => $ldap_obj, #...
Run Code Online (Sandbox Code Playgroud)
另外,Brad的帖子提醒我,即使它们是自动引用的,你也不能将词法分配给文字字符串,即使perl将其解释为自动引用的字符串.
Spa*_*ace 10
我认为你的代码应该是;
my $self = {
_ldap => $ldap_obj,
_dn =>'dc=users,dc=ldap,dc=company,dc=com',
_dn_login => 'dc=login,dc=ldap,dc=company,dc=com',
_description =>'company',
};
Run Code Online (Sandbox Code Playgroud)
改变它并尝试 $perl -c module.pm