Plusieurs soucis dans ton script :
- l'expression régulière /[A maintenance phase begins!|Maintenance phase is done!]/;
est incorrecte, car les [ ] servent à définir une classe de caractère, c'est à dire une liste de caractère acceptable comme motif pour 1 caractère, et non pas, comme tu le souhaites, une chaine de caractère. Ainsi, ta regexp devrait être tout simplement : /A maintenance phase begins!|Maintenance phase is done!/;
- l'affectation my @temp = $ligne est inutile (et inutilisée)
- le premier paramètre de split n'est ni un identifiant, ni une constante lexicale (une expression régulière par exemple). Une extraire l'heure, minute, seconde, tu as tout intérêt à utilise l'expression suivante :
my ($heure, $minute, $seconde) = $ligne =~ /(\d\d):(\d\d):(\d\d)/;
- concernant l'usage de "not" (au lieu de !), je ne te le recommande pas. En effet, même si dans ton cas précis, cela ne change rien, il faut savoir qu'il n'a pas du tout la même précédence que l'opérateur ! (priorité très faible). Son usage dans une expression logique à plusieurs membre est donc sujette à erreur si des parenthèses ne sont pas placées autour).
- par ailleurs, tu utilises une variable scalaire $fin comme référence à un tableau. Pour vérifier si le tableau n'est pas vide, il est préférable d'utiliser l'expression
plutôt que de simplement vérifier que $fin n'est pas undef. En effet, $fin pourrait être défini avec un tableau vide. Exemple
1 2
| $ perl -e 'my $a = [];print qq(Tableau vide\n) if $a;'
Tableau vide |
Partager