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 :

Switch dans perl


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Par défaut Switch dans perl
    Bonjour,

    J'ai un petit souci avec un programme perl/web que je dois modifier et je pense avoir une mauvaise configuration sur ma machine ou je ne sais quoi. J'ai des instructions switch relativement simple du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use Switch;
     
    $val = '1';
     
    print "Content-type: text/html\n\n";
     
        switch ($val) {
            case '1' { print "1" }
            case '2' { print "2" }
        }
    Lorsque je charge me page, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Tue Feb 24 14:28:55 2009] [error] syntax error at /htdocs/web-cgi/services/ctr/prestations/statistiques/test.pl line 8, near ") {"\nString found where operator expected at /htdocs/web-cgi/services/ctr/prestations/statistiques/test.pl line 9, near "case '1'"\nString found where operator expected at /htdocs/web-cgi/services/ctr/prestations/statistiques/test.pl line 10, near "case '2'"\nsyntax error at /htdocs/web-cgi/services/ctr/prestations/statistiques/test.pl line 10, near "case '2'"\n
    Évidement si je supprime mon switch cela fonctionne. J'ai installé le module switch avec cpan en utilisant l'instruction :
    Tout c'est bien déroulé mais impossible de faire fonctionner correctement ce switch !!

    Il faut noter que le code en production fonctionne, mais je n'ai pas accès au détail de la configuration. Mon serveur est un Ubuntu avec Apache2.

    J'avoue être sans ressource devant ce problème, merci d'avance si quelqu'un peu m'aider...
    Christophe

  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
    Ce programme en particulier fonctionne parfaitement, donc je suppose que tu as dû faire une petite erreur de syntaxe quelque part dans ton programme qui n'est pas dans cette version abrégée.
    Mais je te conseille surtout d'éviter le module Switch, c'est un filtre de source et donc par définition instable, susceptible de masquer ou de déplacer des erreurs de syntaxes diverses et variées...
    Sous Perl 5.10 l'instruction "given/when" est sûre et intégrée au langage mais je doute que ton Ubuntu soit suffisamment récent pour avoir cette version de Perl ?

    En général en Perl on a rarement besoin de switch, par exemple une alternative à ton petit programme serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /usr/bin/perl 
    $val = '1';
     
    print "Content-type: text/html\n\n";
     
    my %choice = 
    ( 1 => sub { print "number one" },
      2 => sub { print "number two" },
    );
     
    $choice{$val}();
     
    __END__
    --
    Jedaï

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Par défaut
    OK, merci et effectivement ce n'est qu'une petit version abrégé du code. Voici un des switchs qui me pose problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    switch ($requete){
    	case "3" {
    		$champ = 'sexe';
    		$champ_value = 'Monsieur';
    		}
    	case "4" {
    		$champ = 'sexe';
    		$champ_value = 'Madame';
    		}
    En fait je sais pas si j'ai été claire dans l'exposé du problème. Le programme en question est un Intranet développer dans une société et la personne ayant développée cet Intranet n'est plus là. Comme il y a des modifications mineurs à réaliser et que la machine de prod ne peut pas être mise en maintenance et pas de machine de développement en place, j'ai installé une nouvelle machine avec Perl et Apache. Le reste du code semble fonctionner, mais pas les switchs. Raison pour la quelle en fait je cherche une solution pour évité de ré écrire le code.

    Et pour être claire, je n'ai jamais fait de perl avant...

    Donc si je résume, le problème ne viendrai pas du source, mais plus de la version des modules et de ma configuration Perl.

    Et le module Switch ne fait donc que de remplacer du code par du code si j'ai bien compris et du coups, j'ai peut-être une erreur de syntaxe ou autre ailleurs qui fait planter ma application.

    Alors soit : je cherche une solution pour faire fonctionner les switchs comme ils sont dans le code, soit je les changes avec la fonction que tu m'as cité ci-dessus.

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/05/2005, 16h00
  2. Switch dans fonction membre
    Par Raish dans le forum C++
    Réponses: 11
    Dernier message: 30/03/2005, 14h41
  3. [JSP] [STRUTS] Switch dans une action
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/07/2004, 15h21
  4. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  5. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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