2015-04-29 1 views
1

Comment puis-je écrire un programme Perl qui attendra la création d'un fichier d'entrée, puis traiter le contenu de ce fichier? Idéalement, cela devrait être une solution multiplateforme plutôt que de dépendre des caractéristiques d'un système d'exploitation donné.Vérifier le fichier et le traiter, existence du script de lancement de fichier - perl

Notez que le fichier peut exister dès que le script est démarré ou qu'il peut être créé ultérieurement. Une fois le fichier d'entrée traité, le programme Perl peut quitter.

[Notez qu'il s'agit d'une version substantiellement modifiée de la question d'origine. L'affiche originale devrait être libre de faire des modifications supplémentaires si je n'ai pas bien compris la question.]

+0

Désolé, je crains que vous n'ayez besoin de développer votre question. En particulier - qu'essayez-vous d'accomplir? La réponse est "probablement" mais vous n'obtiendrez pas une réponse utile sans ajouter un peu plus à votre question. – Sobrique

+0

Sur quelle plate-forme travaillez-vous? – Borodin

+0

Jusqu'à présent, j'avais créé un script Perl qui extrait des informations à partir du fichier XML. Ce qui fonctionne bien. Mais le fichier n'est pas toujours existant. J'ai besoin de quelque chose qui va dire à mon script de fonctionner maintenant parce que le fichier qu'il est sur le point de traiter et de continuer. – palyxk

Répondre

1

Jetez un oeil à File::Monitor. Il vous informera de toutes sortes d'événements de système de fichiers. Ce programme montre comment surveiller la création de fichiers dans un répertoire spécifique et traiter tous les nouveaux fichiers XML.

use strict; 
use warnings; 
use 5.010; 

use File::Monitor; 

my $monitor = File::Monitor->new; 

$monitor->watch({ 
    name  => 'E:\Perl\source', 
    files  => 1, 
    callback => { files_created => \&files_created } 
}); 

while() { 
    my @new = $monitor->scan; 
    sleep 1; 
} 

sub files_created { 
    my ($name, $event, $change) = @_; 
    for my $file ($change->files_created) { 
    process_xml($file) if $file =~ /\.xml$/i; 
    } 
} 

sub process_xml { 
    my ($file) = @_; 
    say $file; 
}