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 :

Comment sont gérés les require / do ?


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Comment sont gérés les require / do ?
    Bonjour a tous. Dans le contexte d'un proxy à usage personnel, j'ai besoin d'inclure un morceau de code dans mon programme principal. Ce morceau étant défini par une variable.

    j'ai essayé avec ces deux méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    do $mavar.'pm';
     
    require $mavar.'pm';
    Dans les deux cas, le code à l'intérieur est éxécuté. Jusque la, tout va bien.

    J'utilise HTML::TreeBuilder pour parser mon HTML, et selon ou je fais le parsage, ca empeche toutes les images de se charger.

    Ma premiere méthode, qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $info{content}=$response->content;
     
    do module.pm #modify the tree
     
    return \$info{content};
    avec le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use strict;
    use warnings;
    use HTML::TreeBuilder; # Ensure weak references in use
     
    my $tree = HTML::TreeBuilder->new_from_content($awproxy::process::info{content}) or die $!;
     
    my $elem = $tree->look_down(_tag => "img");
    $elem->attr('width', '240');
    $elem->attr('height', '60');
     
    $awproxy::process::info{content} = $tree->as_HTML(undef,"\t");
    $tree->delete();
     
    1;

    Et maintenant, la version qui pourrit toutes les images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $info{content}=$response->content;
    $info{tree} = HTML::TreeBuilder->new_from_content($info{content}) or die $!;
     
    do module.pm #modify the tree
     
    $info{content} = $info{tree}->as_HTML(undef,"\t");
    $info{tree}->delete();
     
    return \$info{content};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $elem = $awproxy::process::info{tree}->look_down(_tag => "img");
    $elem->attr('width', '240');
    $elem->attr('height', '60');
    Aucune des images n'est chargée dans la 2e méthode.

    Ma principale interrogation est donc de comprendre pourquoi, alors que je pense faire la meme chose.

    2e chose : est ce que c'est la bonne méthode pour executer un morceau de code dans un autre fichier, tout en partageant des variables?

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    J'ai fait un petit essai avec la page d'accueil google, et je n'ai pas constaté d'écart majeur entre les deux méthodes.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    ma question n'etait pas la difference entre les méthodes, mais comment ca se passe en pratique pour une seule de ces méthodes(j'ai pas vu de difference non plus).

    Dans les codes que j'ai fourni, je modifie une fois une variable dans le code principal, et l'autre fois dans le "require" et j'obtiens pas la meme chose. Et cest plutot ca mon probleme

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Oui, et ce que je disais, c'est que dans l'essai que j'ai fait, je n'ai pas constaté ton problème.
    Le problème se situe donc peut-être "ailleurs".
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Tu as fait quoi comme essai?

    Parce qu'en effet, dans les deux cas, le code HTML retourné par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tree->as_HTML(undef,"\t");
    sera strictement identique, mais dans un cas les images sont chargées, mais pas dans l'autre

    Si je regarde avec FireBug, j'obtiens toujours l'erreur :
    Image corrupt or truncated http://...

    Et de même, si j'essaie d'aller sur l'url de l'image, elle est corrompue

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    J'ai créé les 4 fichiers suivants :

    proxy1.pl:
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use WWW::Mechanize;
    use Data::Dumper;
     
    my $mech = WWW::Mechanize->new();
    $mech->get(qq(http://www.google.fr/webhp?hl=fr));
     
    our %info;
    $info{content} = $mech->content();
     
    do "proxy1.pm"; #modify the tree
     
    print Data::Dumper->Dump([$info{content}], [qw(*info{content})]);
    proxy1.pm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use strict;
    use warnings;
    use HTML::TreeBuilder; # Ensure weak references in use
     
    my $tree = HTML::TreeBuilder->new_from_content($::info{content}) or die $!;
     
    my $elem = $tree->look_down(_tag => "img");
    $elem->attr('width', '240');
    $elem->attr('height', '60');
     
    $::info{content} = $tree->as_HTML(undef,"\t");
    $tree->delete();
     
    1;
    proxy2.pl:
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use HTML::TreeBuilder; # Ensure weak references in use
    use WWW::Mechanize;
    use Data::Dumper;
     
    my $mech = WWW::Mechanize->new();
    $mech->get(qq(http://www.google.fr/webhp?hl=fr));
     
    our %info;
    $info{content} = $mech->content;
    $info{tree} = HTML::TreeBuilder->new_from_content($info{content}) or die $!;
     
    do "proxy2.pm"; #modify the tree
     
    $info{content} = $info{tree}->as_HTML(undef,"\t");
    $info{tree}->delete();
     
    print Data::Dumper->Dump([$info{content}], [qw(*info{content})]);
    proxy2.pm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use strict;
    use warnings;
     
    my $elem = $::info{tree}->look_down(_tag => "img");
    $elem->attr('width', '240');
    $elem->attr('height', '60');
    Puis j'ai lancé les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     perl proxy1.pl > 1
     perl proxy2.pl > 2
    En comparant les fichiers 1 et 2, je n'ai pas vu de différence sur la présence ou l'absence d'images.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    je pense que cest normal, vu que le code HTML est identique dans mon cas aussi. Quand tu recupères une page, les endroits ou ya des images cest juste
    <img src='blabla.png' />, cest du texte, donc aucun probleme.

    Enfin, j'ai résolu mon probleme en mettant une regex pour ne pas parser les pages ou ya des images

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($r->uri =~ /\.png$|\.jpg$/i) #sinon, ca bugge pour les images
    	{
    		return \$info{content};
    	}
    Bon, du coup ca marche, mais je comprends pas pourquoi

    edit : ha bah si, j'ai compris. En fait, je faisais do module.pm que pour certaines pages, et donc pas celle ou ya des images, donc le GET se faisait correctement

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    ...Le problème se situe donc peut-être "ailleurs".
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. [Conception] Comment sont chargées les données dans les jeux?
    Par drcd dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 24/10/2006, 15h09
  2. [c#] Comment sont gérés les noms de DataTable dans un DataSet ?
    Par Seth77 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 10/09/2006, 19h02
  3. comment sont stoquées les données
    Par Biosox dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/01/2006, 09h17
  4. Comment sont programmés les plug-ins de jeux
    Par Marneus dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 25/11/2005, 18h01
  5. Réponses: 2
    Dernier message: 02/08/2005, 13h53

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