2010-03-02 29 views
3

Est-il possible d'ajouter la balise -w à la première ligne d'un programme perl, puis d'exécuter le programme à partir d'un shell comme bash ou dos et d'écrire tous les avertissements dans un fichier?Obtention des résultats de la balise perl -w dans un fichier

perl somescript.pl > somefile.txt 

Il s'agit d'un retour aux programmes COBOL de vérification de bureau à l'école. J'aimerais avoir tous les avertissements devant moi sur un bout de papier afin que je puisse passer en revue mon programme et les corriger un à un. Si la commande ci-dessus ne fonctionne pas, existe-t-il un moyen par programme pour obtenir tous les avertissements d'un script dans un fichier? Merci les gars!

Répondre

4

Essayez ceci:

perl somescript.pl 2&> somefile.txt 

Lorsque vous utilisez la redirection simple (>), vous redirigez que le flux de sortie standard du programme, alors que les mises en garde sont sauvés à la norme erreur flux de sortie. Voir par exemple le Bash Reference Manual.

Il existe également un module Vi::QuickFix sur CPAN qui peut enregistrer les avertissements dans un fichier que vous pouvez charger dans Vim et inspecter tous les avertissements sans rechercher manuellement les numéros de ligne. (Google pour vim quickfix.) Je ne l'ai pas essayé moi-même, cependant.

1

zoul a géré la redirection, alors voici la réponse incroyablement complexe sur les avertissements.

Il suffit d'appeler le programme comme ceci: perl -w script.pl

Cela oblige les avertissements être activé partout dans le script et tous les modules. Il est vraiment préférable d'utiliser le pragma des avertissements dans chaque module que vous écrivez. Voir perldoc perllexwarn pour plus d'informations à ce sujet.

Une autre astuce qui est agréable lors du débogage est d'utiliser Carp::Always. Si force une trace complète de pile sur chaque erreur. Je trouve cela très utile. Il suffit de lancer votre script comme ceci:

perl -MCarp::Always somescript.pl 

ou pour l'obtenir dans un fichier:

perl -MCarp::Always somescript.pl 2&> somefile.txt 

Et enfin, je me éloigne du sujet de votre question un peu plus. Beaucoup de gens aiment instrument leur code en utilisant une bibliothèque de journalisation comme Log4Perl. Des outils comme celui-ci vous permettent d'activer la journalisation à un certain niveau (normal ou de débogage par exemple) ou sur des parties spécifiques de votre application sur des exécutions individuelles de votre code. C'est l'évolution finale (?) De l'instruction d'impression de débogage. Il peut être très utile lors du débogage des défaillances en cours de développement et sur le terrain une fois que vous avez atteint la phase de maintenance.