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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
... if (!defined(eval('$regex =~ '."/$regex/")));
... if (!defined(eval("/$regex/")));
mais j'obtiens systématiquement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.