2011-01-18 5 views
3

Je dois optimiser un intranet écrit en Perl (environ 3000 fichiers). La première chose que je veux faire est d'activer les avertissements "-w" ou "use warnings;" afin que je puisse me débarrasser de toutes ces erreurs, puis essayez d'implémenter "use strict;".Activer les avertissements globaux

Existe-t-il un moyen de dire à Perl d'utiliser des avertissements tout le temps (comme les paramètres de php.ini pour PHP), sans avoir besoin de modifier chaque script pour ajouter "-w" à sa première ligne?

J'ai même pensé à faire un alias pour /usr/bin/perl, ou le déplacer vers un autre nom et faire un script simple au lieu de simplement ajouter le drapeau -w (comme un proxy).

Comment le débogueriez-vous?

+0

Difficile d'accepter une réponse où tous les 3 ont aidé [email protected] et @Michael Carman me donnent une réponse à ce que je cherchais en premier lieu, mais @Jonathan Leffler a donné un bon conseil "ne fais pas ça" (et a donné une bonne explication pour ma deuxième question: comment voulez-vous Débogage?) ... J'espère que personne ne se fâchera si j'accepte @Jonathan Leffler. Merci à tous pour votre aide. –

Répondre

9

La mise à jour des avertissements et strict est difficile. Je ne recommande pas une approche Big Bang, en mettant des avertissements (et encore moins des restrictions) sur tout. Vous serez inondé d'avertissements au point d'inutilité.

Vous commencez par activer les avertissements sur les modules utilisés par les scripts (il y en a, n'est-ce pas?), Plutôt que d'appliquer des avertissements à tout. Obtenez le noyau propre, puis travaillez sur la périphérie, une unité à la fois. Donc, en fait, je vous recommande d'avoir un script simple (Perl) qui trouve simplement une ligne qui ne commence pas avec un hachage et ajoute use warnings; (et peut-être use strict; aussi, puisque vous allez avoir affaire à un script à un temps), de sorte que vous pouvez faire les rénovations un script à la fois. En d'autres termes, il vaudra probablement mieux éditer chaque fichier au fur et à mesure que vous le rénoverez. Je n'utiliserais que l'option couverture pour faire une simple évaluation de l'ampleur du problème: est-ce un désastre total et complet, ou simplement quelques peccadilles dans quelques fichiers? Malheureusement, si le code a été développé sans avertissements et strict, il est plus susceptible d'être «catastrophe» que «minime».

Vous pouvez constater que vos prédécesseurs étaient enclins à copier et coller et que certains idiomes erronés apparaissent à plusieurs reprises dans le code copié. Ecrivez un script Perl qui corrige chacun d'eux. J'ai un tas de fix* scripts dans mon répertoire personnel bin qui traitent de divers changements - soit la résolution des problèmes créés par des collègues récalcitrants (ou, plus généralement, simplement long quitté) ou pour s'adapter à mes propres normes en constante évolution.

+0

Ayup.⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠ – tchrist

+0

J'ai déjà réparé les modules, j'en ai un (cgilib.pl) que chaque script utilise, et un autre 8 qui sont utilisés par différents scripts. Maintenant, je dois plonger dans le pool de scripts pour les réparer. J'ai fait une autre chose, j'ai fait cgilib.pl connecter chaque chemin des scripts qui y accèdent (en utilisant $ 0), jusqu'à présent, seulement 273 scripts sont régulièrement utilisés, donc je vais commencer avec eux, j'ai l'impression qu'environ 70% des Les scripts sont vieux et ne sont pas utilisés du tout, s'ils ne seront pas enregistrés dans le journal, je les copierai sur le serveur de sauvegarde et les supprimerai du serveur de production. –

+0

@radu: Cela semble assez typique - une règle classique 80:20 (bien que dans ce cas il soit plus proche de 90:10) avec 20% des scripts faisant la plupart du travail et le reste étant en grande partie oublié ou très rarement utilisé. Il est très judicieux de noter quels scripts sont utilisés - cela vous indique où concentrer vos efforts. Même dans les 273, il y aura probablement 20-50 très utilisé et le reste moins utilisé. Bonne chance! –

5

Vous pouvez définir des avertissements et des restrictions pour tous les scripts Perl en ajoutant -Mwarnings -Mstrict à votre variable d'environnement PERL5OPT. Voir perlrun pour plus de détails.

12

Eh bien ...

Vous pourrait régler le envariable de PERL5OPT pour tenir -w. Voir le perlrun manpage pour plus de détails. J'espère que vous considérerez aussi que le -T ou peut-être -t, pour le suivi de sécurité.

Mais je ne vous envie pas. Le code retrofitting développé sans le bénéfice de use warnings et use strict est généralement un PITA royal.

J'ai quelque chose d'un standard boiler-plate J'utilise pour démarrer de nouveaux programmes Perl. Mais je n'ai pas pensé aux programmes CGI, qui bénéficieraient probablement de quelques ajustements contre cette plaque de chaudière.

+0

+ 1 surtout pour le Royal PITA (qui est poli). –

+0

Je ai maintenant testé l'approche PERL5OPT, je n'ai pas compris la documentation, mais je lance une commande d'exportation dans le terminal "export PERL5OPT = w", après que chaque script que je cours dans cette session terminal devrait bénéficier de ce commutateur -w (ça fonctionne), mais quand je charge les scripts depuis Apache, il n'y a pas d'efet, il y a un moyen de faire cela pour Apache, certains parametres dans httpd.conf ou n'importe ou? –

Questions connexes