Pourquoi Perl se plaindre “ne Peut pas modifier la constante de l'élément scalaire affectation”?
J'ai ce sous-programme Perl qui est à l'origine du problème:
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;
}
ce qui est mauvais sur ce code :
j'ai eu cette erreur ne Pouvez pas modifier la constante de l'élément scalaire mission à Cœur.pm de la ligne 12, près de "$ldap_obj,"
Celui qui est de la ligne 12?
_ldap = $ldap_obj,
_ldap = $ldap_obj,
use strict; use warnings;
OriginalL'auteur joe | 2010-05-18
Vous devez vous connecter pour publier un commentaire.
Je pense que votre code doit être;
Changer et essayer avec
$perl -c module.pm
OriginalL'auteur Space
Puisque vous n'êtes pas à l'aide de la "graisse virgule" ( => ), votre trait de soulignement noms sur le côté gauche n'est pas auto-cité et donc, sans les sigils (
'$'
,'@'
, ou'%'
), ils ne peuvent être sous-routine noms. Puisque vous n'avez pas déclaré de ces sous-marins, perl est de les prendre pour des constantes, et de vous dire que vous ne pouvez pas attribuer à des constantes (ou sous les invocations).La bonne solution est de changer vos missions en double flèches
Aussi, Brad post me rappelle, même si elles ont été auto-citation, vous ne pouvez pas affecter un lexicale à une chaîne littérale, même si perl interprétée comme une auto-chaîne entre guillemets.
OriginalL'auteur Axeman
Une table de Hachage est juste une liste de clés, des paires de valeurs. Il y a une syntaxe construire pour aider à différencier les clés de la valeurs. Il est connu comme un "fat flèche"
=>
. Cette construction les forces de la main gauche argument une chaîne de caractères, puis se transforme en une simple virgule.C'est ce que vous vouliez écrire:
C'est ce que vous avez réellement écrit:
C'est pourquoi je vous recommande de toujours commencer un programme en Perl avec des avertissements activé.
Ce dernier exemple montre pourquoi vous devriez également
use strict
.Je devrais avoir déclaré
$s
avant d'essayer de l'utiliser:C'est pourquoi je toujours commencer mes programmes Perl avec:
OriginalL'auteur Brad Gilbert