Bonjour R�mi et les autres,
voici mon grain de sel � ton probl�me :
j'appr�cie la puissance des expressions r�guli�res de perl et leur efficience, mais je trouve qu'au del� d'une certaine complexit�, elles sont difficile � maintenir (� modifier, ou simplement � comprendre � coup s�r par le suivant, n'est-ce pas R�mi ;-)
De plus les cas o� elles ne se comportent pas exactement comme notre intuition le voudrait existent et je trouve le danger non n�gligeable.
[Perl Cookbook, Pattern Matching, pp 158...]
Donc je pr�f�re par principe d�composer le probl�me de fa�on plus lisible et v�rifiable.
Dans le programme de test ci-dessous, j'ai utilis� une variante de split qui n'utilise pas un pattern /xxx/ mais tout simplement " " : c'est un cas particulier qui veut simplement reproduire ce que bash fait si bien : splitter la ligne de commande de fa�on intuiteve entre 'blancs' (un ou plusieurs espaces ou tabs).
Le motto de Perl est qu'il y a plusieurs fa�ons de r�soudre un probl�me, mais certaines fa�ons sont plus �gales que d'autres.
Bons essais,
Alain
#!/usr/bin/perl # ------------------------------------- # A.Empain, test for R�mi # usage : cat tel.lst | tel IP # or: tel IP tel.lst # -------------------------------------
my $IP=shift(@ARGV);
while(<>) {
chomp;
my $line=$_;
if ( $line =~ /$IP/ ) {
# split(" "... is a special case, splitting like within a shell
# command line, using space(s) or tab(s) as delimiters
my @FIELD=split(" ",$line);
if ( $FIELD[1] eq $IP ) {
print "==> Found : $FIELD[0]\n";
}
else {
print "Bad match within <$line>\n";
}
}
else {
print "No match : <$line>\n";
}
}
# --------------------------------------------------------- tel.lst # --------------------------------------------------------- poly1/poly 1192.168.50.31 D 255.255.255.255 5060 Unmonitored poly1/truc D 1192.168.50.31 255.255.255.255 5060 Unmonitored poly1/machin 1192.168.50.33 D 255.255.255.255 5060 Unmonitored poly1/chose 1192.168.50.34 D 255.255.255.255 5060 Unmonitored
# ----------------------------------------------------------- Commande ./tel 1192.168.50.31 tel.lst # ----------------------------------------------------------- ==> Found : poly1/poly Bad match within <poly1/truc D 1192.168.50.31 (...)> No match : <poly1/machin 1192.168.50.33 D (...)> No match : <poly1/chose 1192.168.50.34 D (...)>
R�mi Letot wrote:
Hello,
pour le background de l'affaire, il faut savoir que je ne suis pas un programmeur, et encore moins en perl :-) J'ai trouv� un petit script perl qui me permet de rebooter � distance des t�l�phones IP que j'utilise. Ce script ne fonctionnait pas, et j'ai fini par isoler la portion du code qui ne fait pas ce qu'elle doit :
if ( $testline =~ m{\s+(.*?)\/.*$_[0].*}i ) { $extension = $1;
Ce bout de code est dans une proc�dure qui prend l'adresse ip du
t�l�phone en argument, et les "testline" sont du format suivant :
poly1/poly1 192.168.50.31 D 255.255.255.255 5060 Unmonitored
Dans cet exemple, le param�tre pass� � la proc�dure est 192.168.50.31, et extension en sortie doit valoir poly1.
Visiblement la condition if n'est jamais valid�e (j'ai plac� un print dedans qui ne passe jamais), mais je n'ai pas la moindre id�e de ce que repr�sente ce patern, et encore moins de comment aborder ce truc. Quelqu'un peut m'aider ou me mettre dans la bonne direction ?
Merci,
-- ------------------------------------------------------------ Dr Alain EMPAIN <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Bioinformatics, Molecular Genetics, Fac. Med. Vet., University of LIEGEe, Belgium Bd de Colonster, B43 B-4000 LIEGEe (Sart-Tilman) WORK: +32 4 366 4159 FAX: +32 4 366 4122 HOME: rue des Martyrs,7 B- 4550 Nandrin +32 85 51 2341 GSM: +32 497 70 1764 ------------------------------------------------------------------------------- What's your favorite Linux program? That's like asking a poet what his favorite word is; it's all in how they go together. (Michael Stutz, author of The Linux Cookbook) ------------------------------------------------------------------------------- _______________________________________________________ Linux Mailing List - http://www.unixtech.be Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux Archives: http://www.mail-archive.com/[email protected] IRC: chat.unixtech.be:6667 - #unixtech NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech

