2010-10-08 35 views
2

j'ai commencé à apprendre comment faire un module en Perl avec perltoot:Comment gérer les erreurs à l'intérieur ou à l'extérieur d'un module Perl?

package Person; 
use strict; 

my($NAME, $AGE, $PEERS) = (0 .. 2); 

sub new { 
    my $self = []; 
    $self->[$NAME] = undef; 
    $self->[$AGE] = undef; 
    $self->[$PEERS] = []; 
    bless($self); 
    return $self; 
} 

sub name { 
    my $self = shift; 
    if (@_) { $self->[$NAME] = shift } 
    return $self->[$NAME]; 
} 

sub age { 
    my $self = shift; 
    if (@_) { $self->[$AGE] = shift } 
    return $self->[$AGE]; 
} 

sub peers { 
    my $self = shift; 
    if (@_) { @{ $self->[$PEERS] } = @_ } 
    return @{ $self->[$PEERS] }; 
} 

1; 
  • Je voudrais savoir comment, si possible avec code exemple dois-je menace les erreurs dans le module et à l'extérieur il ?

Par exemple:

use Person; 
$test= Person->new() or die Person->Error; 

ou

sub new { 
    my $self = []; 
    $self->[$NAME] = undef; 
    $self->[$AGE] = undef; 
    $self->[$PEERS] = []; 
    bless($self); 
    ######### 
    # some error happened here and I need to say something 
    ######### 
    return $self; 
} 
  • Si je l'appelle tout le reste dans le module qui avait une erreur, problème, argument manquant comment est le correct moyen de dire qu'il y avait une erreur?

PS: Espérons que ma question est pas trop large et tout le monde :) salut

+2

Vous avez écrit beaucoup de code pour construire vos objets et permettre aux utilisateurs d'accéder et de modifier leurs attributs. Vous voudrez peut-être jeter un coup d'œil à ['Moose'] (http://search.cpan.org/perldoc?Moose) et à des modules similaires pour vous épargner un peu de dactylographie et d'éventuelles sources de bugs. – rafl

+2

@rafl - tout en étant une bonne idée pour les utilisateurs avancés, sachant comment rouler son propre module sans Moose est un must lors de l'apprentissage de Perl, ce qui semble être l'étape où se trouve l'OP. – DVK

+0

@DVK merci :)! – Guapo

Répondre

4

Carp routines peuvent être utilisés pour signaler les erreurs.

use Carp qw{ croak }; 

sub new { 
    my $self  = {}; 
    $self->{$NAME } = undef; 
    $self->{$AGE } = undef; 
    $self->{$PEERS} = []; 

    # replace the following with something appropriate 
    if ($error_occurred) { 
     croak 'Something did not work right'; 
    } 

    return bless, $self; 
} 
+0

Belle façon de le faire, avez-vous une fonction pour l'utiliser avec ou vous envelopper juste croack chaque fois que vous avez besoin de lancer une attente à quelque chose? Je suis vraiment désolé que je ne peux pas encore remettre votre réponse car je n'ai pas assez de points, mais si quelqu'un lit ceci s'il vous plaît upvote sa réponse. – Guapo

+0

Notez que le mécanisme d'exception de perl utilise réellement 'die' pour lancer des exceptions et' eval BLOCK' (ou de belles abstractions en plus, comme ['Try :: Tiny'] (http://search.cpan.org/ perldoc? Try :: Tiny)) pour les attraper. 'croak' est juste une sorte de wrapper autour de die. 'perldoc -f die' a beaucoup plus de détails sur les exceptions dans perl. – rafl