Exceptions

Lorsqu’une erreur se produit, l’API Perl IMu lève une exception (die dans la terminologie Perl). L'exception est un objet IMu::Exception.

Pour une gestion simple des erreurs, il suffit généralement d’intercepter l’exception et de la signaler sous forme de chaîne :

eval { # ⋯ }; if ($@) { die("Error: $@"); } 

La classe IMu::Exception remplace l’opérateur Perl "" (stringify) (qui est invoqué « magiquement » lorsque l’objet d’exception est utilisé en tant que chaîne) et renvoie un message d’erreur.

Pour gérer des erreurs IMu spécifiques, il est nécessaire de vérifier que l’exception est un objet IMu::Exception avant de l’utiliser. La classe IMu::Exception comprend une propriété appelée id. Il s’agit d’une chaîne de caractères contenant le code d’erreur interne IMu pour l’exception. Par exemple, vous pouvez intercepter l’exception levée lorsque la méthode connect d’un objet IMu::Session échoue et essayer de vous connecter à un autre serveur :

my $mainServer = 'server1.com'; my $alternativeServer = 'server2.com'; my $session = IMu::Session->new(); $session->{'host'} = $mainServer; eval { $session->connect(); }; if ($@) { if (ref($@) && $@->isa('IMu::Exception')) { # Check for specific SessionConnect error if ($@->getID() eq 'SessionConnect') { $session->{'host'} = $alternativeServer; eval  { $session->connect(); }; } }  # Vérifier à nouveau l’exception. Si nous avons réussi à nous connecter # à $alternativeServer alors $@ sera effacé. if ($@) { die("Error : $@\n") ; } } # À ce stade, la session est connectée soit au serveur principal, # soit au serveur alternatif.