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

Répondre à