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/linux@lists.unixtech.be IRC: chat.unixtech.be:6667 - #unixtech NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech

Répondre à