Partout, surtout dans DBI, je vois ce message venir tout le temps. C'est déroutant, parce que la première chose qui vient à l'esprit est que les arguments que je passe la fonction sont définis sur undef (ou quelque chose de similaire), mais ce n'est clairement pas le cas.
Compte tenu d'un module et un script correspondant ...
Module: ./lib/My/Module.pm
package My::Module;
use strict;
use warnings;
sub trim {
my $str = shift;
$str =~ s{ \A \s+ }{}xms; # remove space from front of string
$str =~ s{ \s+ \z }{}xms; # remove space from end of string
return $str;
}
Script: ./test.pl
#!/usr/bin/perl
use strict;
use warnings;
use My::Module qw(trim);
print $My::Module->trim(" \t hello world\t \t");
je reviens le message d'erreur
Californie appeler la méthode « trim » sur une valeur non définie à la ligne de ./text.pl 7.
Enfait, si je l'appelle $My::Module->notamethod("hello world");
donne une erreur semblable.
Quel est le problème avec le script/module ci-dessus?
Qu'est-ce que cette erreur Can't call method “X” on an undefined value at ${SOMEFILE} line ${SOMELINE}
dit vraiment? Est-ce que cela fait référence au contexte de l'appel de la méthode (passé ici pour imprimer), ou au contexte des arguments?
J'ai tendance à les mettre quand j'écris des regex parce que j'aime mettre des commentaires en ligne :). J'ai juste oublié de les sortir pour l'exemple. – heymatthew
@The Daemons Advocate,/s et/m n'ont rien à voir avec les commentaires en ligne. C'est/x. – cjm