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 :

Erreur perl Can't use string ,


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut Erreur perl Can't use string ,
    Lut, j'ai un petit problème avec un string et je n'arrive pas a m'en débarasser, je me suis renseigné sur l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't use string ("text/html") as an ARRAY ref while "strict refs" in use at C:\Documents and Settings\vod_evil\Bureau\nod\5.pl line 422.
    sur le site http://perl.enstimac.fr/DocFr/perldiag.html.

    Mais je n'arrive pas a régler mon problème, voila ce que me dit perl :

    text/html; charset=iso-8859-1
    text/html
    text/html
    Can't use string ("text/html") as an ARRAY ref while "strict refs" in use at C:\Documents and Settings\Teddy\Bureau\nod\5.pl line 422.
    tout vas bien puis d'un coup j'ai cette erreur

    Mon code étant top long je ne peut pas tout mettre ici :

    Je fait mes requetes http grace a cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub get_http_request {
     my $request = HTTP::Request->new('GET', $_[0]);
     my $res = $ua->request($request);
     LWP::Debug::trace("$res");
     return $res;
    }
    puis je déréférence le hash de retour comme ceci
    pour la suite de mon prgramme je crée une nouvelles référence
    que j'envoie a un sous programme comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @donnes = build_data($wp);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    sub build_data {
     my $res = shift;
       my $url = $res->{'_request'}{'_uri'};
       my $code = $res->{'_content'};
       my $verbose = robot_tag($code);
       my $date = date();
       my $base = $url;
     
       # Récupération de la taille du document
       my $size = $res->{'_headers'}{'content-length'};
           if ( !$size ) {
             $size = 0;
           } elsif ( $size ne "0" || "undef" ) {
                $size /= 1024;
                $size = substr($size, 0, 4);
           }
            else {
    	     $size = 0;
           }
     
       my $content_type=  ctype($res->{'_headers'}{'content-type'}[0]);  
     
       my $revisit = revisit_tag($code);
     
       # On cherche si le document a un header last-modified
       my $last_modified;
       unless ( !$res->{'_headers'}{'last-modified'} ) {
         $last_modified = http_date($res->{'_headers'}{'last-modified'});
       }
        else {
    	  $last_modified = "default";
       }
     return "$verbose","$code","$date","$url","$size","$content_type","$revisit","$last_modified";
    }
    qui renvoie un tableau contenant le code de la page etc...

    Mon problème ce situe ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $content_type=  ctype($res->{'_headers'}{'content-type'}[0]);
    ma fonction ctype sert juste a tronquer le header content_type s'il est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text/html; charset=iso-8859-1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub ctype {
     my $cp = shift;
     if ( $cp =~ /;/ ) {
          $cp =~ s/;(.*)//;
     }
      return $cp;
    }
    voila

    Merci de votre aide[/url]

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut Re: Erreur perl Can't use string ,
    Citation Envoyé par vodevil
    Mon problème ce situe ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $content_type=  ctype($res->{'_headers'}{'content-type'}[0]);
    Et que se passe-t-il si tu mets juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $content_type=  ctype($res->{'_headers'}{'content-type'});
    ??
    Par ailleurs, j'aimerais bien savoir pourquoi tu maltraites ton objet réponse en le déréférençant en un hash ?

    --
    Jedaï

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    C'etait juste dans un but de facilité d'utilisation, je n'etait pas trop sur de moi j'arengerai sa après avoir réussie a fait marche correctement le robot

    Avec ta solution il n'y a plus d'erreur mais voila ce que sort perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    text/html
    ARRAY(0x2887f8c)
    ARRAY(0x1bedf24)
    ARRAY(0x287dcb8)
    ARRAY(0x287a628)
    ARRAY(0x2906000)0
    ARRAY(0x28a12ac)0
    ARRAY(0x2850f8c)

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Voilà l'un des problèmes qui apparaît justement à cause de ta conversion de l'objet en hash.. Visiblement, l'objet stocke à cet endroit soit une chaîne de caractère, soit un 0, soit un tableau. Avec les méthodes de l'objet tu aurais probablement eu un résultat cohérent quelque soit ta demande.
    Par ailleurs je ne comprend pas comment convertir en hash et devoir utiliser des clés au nom bizarroïde peut être plus facile que d'utiliser les méthodes de l'objet ?

    --
    Jedaï

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    a donc c'est a cause mde mon hash, , je vais me pencher la dessu de suite

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    Merci a toi Jedai j'ai trouvé mon erreur et aussi revue complètement mon code tout marche a merveille maintenant,

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

Discussions similaires

  1. Erreur "You can't use'\spacefactor' in vertical mode"
    Par mattlev dans le forum Erreurs - Avertissements
    Réponses: 7
    Dernier message: 13/05/2015, 03h00
  2. Can't use string
    Par bforzeus dans le forum Langage
    Réponses: 16
    Dernier message: 22/10/2012, 12h38
  3. Réponses: 2
    Dernier message: 05/07/2010, 14h00
  4. Réponses: 2
    Dernier message: 10/04/2008, 18h16
  5. Can't use string as an Array ref
    Par bennyboy dans le forum Langage
    Réponses: 1
    Dernier message: 10/03/2008, 13h01

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