Quelle est la différence entre la Carpe/Croa, cot-cot-codec/l'Avoue, et verbeux options?
Je n'ai pas utilisé la Carpe car j'ai généralement roulé ma propre. Cependant, dans l'esprit de garder avec des modules de Base, je l'utilise maintenant. Cependant, il semble que c'est à peine mieux que de mettre en garde/die.
En outre, qu'est-cot-cot-codec/avouer/verbose même le faire? J'ai couru ce petit script pour avoir une idée de la sortie ressemble (parce que la Carpe docs ne pas le faire). Il est exactement le même sur n'importe quelle course (en plus de l'aléatoire de chaînes de caractères).
#!/usr/bin/perl
package Warning;
sub warning {
warn "warn";
}
package CWarn;
use Carp qw(carp cluck);
sub cwarn {
int(rand(2)) ? carp "carp" : cluck "cluck";
}
package Fatal;
use Carp qw(confess croak);
sub fatal {
int(rand(2)) ? confess "confess" : croak "croak";
}
package Loop;
use v5.10;
sub loop {
say '=' x 80;
Warning::warning();
CWarn::cwarn();
loop() unless ($c++ > 10);
Fatal::fatal();
}
package main;
Warning::warning();
CWarn::cwarn();
Loop::loop();
Mise à JOUR: mis à Jour le script avec les noms de paquets et cela fait une différence. Cependant, la Carpe semble encore très basique en termes de connexion de l'information, et il ne supporte pas de sortie web. Je crois que je vais regarder les autres comme CGI::Carp, Log::Sortie, et Log::Log4Perl.
- Avez-vous essayé la lecture de la documentation? C'est mieux que l'essai et l'erreur.
- Je n'ai pas rouler mes propres modules, mais je ne l'utilisation de la programmation Orientée Objet, ce qui signifie que je utiliser des packages. Même si l'ensemble de votre programme est en un seul fichier, mais vous définir par le biais des classes
package
, vous trouverezcarp
etcroak
à portée de main. comme l'a souligné cmj. - Voici la documentation:
The Carp routines are useful in your own modules because they act like die() or warn(), but with a message which is more likely to be useful to a user of your module.
Pas très utile sauf si vous avez personnellement utiliser les paquets et peut voir la différence. - Je vais dire la Carpe documents ne sont pas à indiquer clairement si a est mort ou pas, au moins dans les premiers paragraphes. Juste un noobs de l'expérience.
- En demandant à ce que les fonctions ne est une bonne question, la documentation est très faible dans ce cas. Je l'ai lu des dizaines de fois et j'ai encore du mal à trouver les informations dont j'ai besoin. Il ne semble pas avoir été amélioré pour plus de 7 ans.
Vous devez vous connecter pour publier un commentaire.
Le problème avec votre exemple, c'est que tous nos sous-marins sont dans le même package (le package par défaut:
main
). Ce n'est pas le cas d'utilisation que De la carpe a été conçue pour.La carpe est destiné à être utilisé dans les modules. La raison en est que, lorsqu'un module rencontre un problème, c'est souvent parce que le module de l'appelant transmis les données de mauvaise qualité. Par conséquent, au lieu de l'enregistrement de la ligne où le module découvert le problème, il est souvent plus utile de rendre compte de la ligne où le module a été appelé (code de l'extérieur du module). C'est ce que les fonctions exportées par la Carpe n'.
Il y a 2 jeux de oui/non options. La fonction peut être fatale (comme
die
) ou non mortels (commewarn
). Il peut rapport sur l'état de la ligne où la fonction a été appelée, ou il peut signaler un backtrace complet.L'option verbose forces backtraces sur. Qui est, il ne fait
carp
agir commecluck
, etcroak
agir commeconfess
. Vous pouvez l'utiliser quand vous vous rendez compte que vous avez besoin de plus d'informations de débogage, mais ne veulent pas de modifier le code pour utiliserconfess
.Carp
est mieux quewarn
/die
en ce qu'il affiche le fichier et la ligne de ce qui s'appelle la fonction de lancer une erreur, plutôt que de simplement l'endroit où l'erreur a été levée. Cela peut souvent être utile pour les bibliothèques. (Par exemple, une base de données de la bibliothèque devrait probablement jeter des erreurs indiquant l'emplacement de l'erreur de la base de données est, plutôt que d'indiquer une ligne à l'intérieur de lui-même.)carp
,cluck
,croak
, etconfess
vous donner quatre combinaisons d'options:carp
: pas fatale, pas de tracecluck
: pas fatale, avec backtracecroak
: fatal, pas de traceconfess
: fatal, avec backtrace