2010-02-08 33 views
1

Comment créer un gestionnaire d'événements dans mon code Perl pour intercepter tous les appels basés sur un fichier/répertoire/système, de façon à ce que je puisse déconnecter les entrées de manière juste-à-temps.Perl IO Eventhandler pour les chaînes non tachées

J'ai beaucoup d'accès IO dans mon script, et je trouve l'ajout de code manuel pour ne pas encombrer les encombrants. Est-ce possible sans installer un module CPAN tiers?

Répondre

1

Vous pouvez essayer de prendre un aspect-oriented approach mais cela nécessite l'installation d'un module CPAN, Aspect.

Pour capturer les appels à une méthode/fonction particulière, vous définissez un pointcut (extrait de l'aspect POD):

$pointcut = call qr/^Person::[gs]et_/; # defines a collection of events 

Définissez ensuite le code à prendre avant l'appel:

$before = before { 
    print "g/set will soon be called"; 
} $pointcut; 

Bien que je ne sois pas sûr si le module Aspect vous permet d'intercepter les appels à l'espace de noms CORE :: *.

1

Comment s'attendre à ne pas toucher les données générales? Si vous acceptez tout aveuglément malgré sa source, il ne sert à rien d'utiliser la vérification des traces.

Vous pouvez lire le chapitre "Techniques de programmation sécurisées" au Mastering Perl. Je donne beaucoup de conseils pour traiter de ce genre de choses. Cependant, tout bon conseil va cibler des situations spécifiques, pas des généralisations.

+0

Je peux l'exécuter via une série d'expressions régulières et de branches (if/else/case), etc. –

+0

Cela vous ramène à l'endroit où vous avez commencé. –