IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

impossible de comparer une chaine avec use strict


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut impossible de comparer une chaine avec use strict
    Quand j'utilse use strict en début de script le script sinterrompt au moment de la comparaison avec une chaine.

    Ci-joint un extrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    use strict;
     
    while (<READER>) {
        if ( $_ =~ /($user)(.*)\[(.*)$hour\:$min\:$sec(.*)\](.*)\"(.*)\"/ ) {
    => plantage sans message d erreur
    si je supprime use strict la comparaison s'effectue correctement.

    les lignes du fichier parcourus sont du style :
    "81.254.38.158 - - [02/Oct/2006:00:36:10 +0100] "POST /home HTTP/1.1" 302 0";


    Quelqu un a une idée ?

  2. #2
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    essaye de déclarer tes variables à vide avant !
    my $user = "";
    while ...
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    contrairement au for le while de defini pas automatiquement $_, donc c'est à toi d'ecrire un truc genre while( my $line = <READER> ) {
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    ben oui,
    c'est bien ca : "le while ne définit pas automatiquement $_, "

    Ca a l'air de marcher bcp mieux !

    Le pire c'est que ca avait l'air de marcher tres bien aussi sans le "use strict".

    En tt cas merci bcp.

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par pospos
    contrairement au for le while de defini pas automatiquement $_, donc c'est à toi d'ecrire un truc genre while( my $line = <READER> ) {


    $_ est une variable intrinsèque de Perl. Elle existe à tout moment de l'exécution du script et sa valeur (ce à quoi elle est définie) dépend du contexte.

    Dans un for, elle est définie avec la valeur de l'indice de boucle, lorsque celui ci n'a pas été isolé dans une variable locale.

    Dans un while, la structure de boucle n'y touche pas. Elle a donc une valeur qui dépend "d'autre chose".

    Dans notre cas, l'opérateur d'E/S <> utilise implicitement $_ s'il n'est pas utilisé avec une autre variable et c'est lui qui définit le contenu de notre $_.

    while (<FICHIER>) {} définit donc correctement la valeur de $_ avec la valeur des lignes lues une à une - et heureusement pour tous mes scripts qui l'utilisent.

    Je conviens qu'il est plus intéressant, en termes de maintenance et de lisibilité du code, de travailler explicitement sur une variable locale.

    Cependant, dans le cas présent ici, il me paraît improbable que ce soit seulement le "while (<READER>)" qui soit à l'origine du problème.

    La vérité doit être ailleurs, même si ça semble résolu.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par 2Eurocents

    La vérité doit être ailleurs, même si ça semble résolu.
    Ah, j'avais raison alors !!! Pospos :



    J'étais persuadé que la remarque de Pospos était fausse, j'attendais justement que qqun contredise ce qu'il disait

    2Eurocents

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Arioch
    J'étais persuadé que la remarque de Pospos était fausse, j'attendais justement que qqun contredise ce qu'il disait
    Moi, j'attendais juste d'avoir accès à ma base de scripts et à un interpréteur Perl. J'avais déjà assez raconté de bétises comme ça ces deux derniers jours où je n'avais pas accès à mes machines.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Remplacement dans une chaine avec PHP, possible ou impossible ?
    Par mf412 dans le forum Langage
    Réponses: 1
    Dernier message: 10/05/2007, 13h40
  2. Réponses: 9
    Dernier message: 16/11/2006, 15h23
  3. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 09h09
  4. Affichage de l'adresse d'une chaine avec cout
    Par thierryguilbert dans le forum SL & STL
    Réponses: 4
    Dernier message: 14/03/2005, 16h04
  5. [langage] pb avec use strict ;
    Par la bille dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2003, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo