Tester si une variable contient une regex valide
Bonsoir.
Comment peut-on tester si une variable contient une expression régulière bien formée (c'est à dire ne produisant pas d'erreur à l'évaluation) ?
Je passe une regex en argument de ligne de commande. Tout marche bien mais je voudrais pouvoir gérer les erreurs moi-même quand l'expression n'est pas valide (éviter l'arrêt du script, afficher un message à moi...).
Voilà le code (simplifié).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/usr/bin/perl -w
use strict;
die "Aaargs!!\n" if (! defined $ARGV[1]) ;
my $path = shift;
my $regex = shift;
opendir DIR, $path
or die "Can't open $path : $!\n";
my @filelist = map {$path . '/' . $_}
grep { -f "$path/$_" && /$regex/}
readdir DIR;
#map {print "$_\n"} @filelist; |
Pour le test j'ai essayé des solutions du genre
Code:
1 2
| ... if (!defined(eval('$regex =~ '."/$regex/")));
... if (!defined(eval("/$regex/"))); |
mais j'obtiens systématiquement
Code:
Use of uninitialized value in pattern match (m//) at (eval 1) line 1.
D'où la question: comment évaluer la syntaxe d'une regex ?
Merci d'avance.