[Perl] Autoconstruire du code perl dans un switch

Patrice Karatchentzeff patrice.karatchentzeff at gmail.com
Mer 3 Juil 17:21:31 CEST 2024


Désolé, je n'avais pas vu ta réponse...

Effectivement, l'idée est bonne et m'évite de passer par un eval.
J'étais obsédé par l'idée de réécrire le même code, alors que ton idée
le simplifie : c'est une bien meilleure approche !

Merci

Le mer. 3 juil. 2024 à 10:11, Guerlais, Patrice (ITOP TD) - AF
<paguerlais at airfrance.fr> a écrit :
>
> Bonjour,
>
> je ne suis pas sûr de comprendre pas ce que tu veux faire : tel que je comprends ton code qui fonctionne, tu initialises deux variables $search et $target avec des valeurs qui dépendent de $choice, puis probablement (non montré) tu fais un traitement avec elles. Ok
>
> Dans ta deuxième version, et toujours si je comprends ce que tu veux faire, tu veux récupérer le n-ième (n généré aléatoirement) couple de valeurs depuis un tableau, affecter les valeurs à deux variables ($search et $target), puis probablement (non montré) faire un traitement dessus. Pour ça tu précharges le fichier dans un tableau pour éviter de le relire à chaque itération. Alors pourquoi t'embêter avec switch/case, puisque tu récupères immédiatement les valeurs dans le tableau ?
>
> # Pré-chargement de @tab
> ...
>
> while (1)
> {
>         ($search, $target) = $tab[randomize(@tab)]->[0..1] ;
>
>         # probablement un traitement autour de $search et $target ici
>         ...
> }
>
> Mais j'ai peut-être tout compris de travers...
> Patrice
>
>
> -----Message d'origine-----
> De : perl-bounces at mongueurs.net <perl-bounces at mongueurs.net> De la part de Patrice Karatchentzeff
> Envoyé : mercredi 3 juillet 2024 09:47
> À : Perl <perl at mongueurs.net>
> Objet : [Perl] Autoconstruire du code perl dans un switch
>
> Salut,
>
> J'ai un code qui fonctionne bien :
>
> while (1) {
>   $choice = randomize(3);
>
>   switch($choice) {
>     case 1  {($search, $target) = ("truc1", "truc2") };
>     case 2  {($search, $target) = ("truc3", "truc4")} ;
>     case 3  {($search, $target) = ("truc5", "truc6")};
>   };
>
> Pour automatiser mon code, j'extrait les « trucs » désormais d'un fichier et je les place dans un tableau de tableau. La longueur du tableau peut varier selon le nombre de lignes de « trucs ». Je voudrais auto-générer le code de mon switch :
>
> while (1) {
>   $choice = randomize(scalar(@tab);
>   switch($choice) {
>   for my $line (0..scalar(@tab) {
>        eval case, $line+1, "{(\$search, \$target) = (\"$tab[$line][0]\", \"$tab[$line][1]\") }"; }
>   };
>
> J'ai alors un Bad case statement (invalid case value?). Donc le
> $line+1 ne passe pas (si je fais un print à la place du eval, le code perl est correct.
>
> Qu'est-ce que je rate ?
>
> Merci
>
> PK
>
> --
>       |\      _,,,---,,_           Patrice KARATCHENTZEFF
> ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
>      |,4-  ) )-,_. ,\ (  `'-'
>     '---''(_/--'  `-'\_)
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques
> [https://img.static-af.com/images/media/C031A655-6574-400A-A8754B3A9D2BD37E/source/logo-af-215x60]<http://www.airfrance.com>
> --
>
> Accédez aux meilleurs tarifs Air France, gérez vos réservations et enregistrez-vous en ligne sur http://www.airfrance.com
> Find best Air France fares, manage your reservations and check in online at http://www.airfrance.com
> ________________________________
> Les données et renseignements contenus dans ce message peuvent être de nature confidentielle et soumis au secret professionnel et sont destinés à l'usage exclusif du destinataire dont les coordonnées figurent ci-dessus. Si vous recevez cette communication par erreur, nous vous demandons de ne pas la copier, l'utiliser ou la divulguer. Nous vous prions de notifier cette erreur à l'expéditeur et d'effacer immédiatement cette communication de votre système. Société Air France - Société anonyme au capital de 126 748 775 euros - RCS Bobigny (France) 420 495 178 - 45, rue de Paris, Tremblay-en-France, 95747 Roissy Charles de Gaulle CEDEX
> The data and information contained in this message may be confidential and subject to professional secrecy and are intended for the exclusive use of the recipient at the address shown above. If you receive this message by mistake, we ask you not to copy, use or disclose it. Please notify this error to the sender immediately and delete this message from your system. Société Air France - Limited company with capital of 126,748,775 euros - Bobigny register of companies (France) 420 495 178 - 45, rue de Paris, Tremblay-en-France, 95747 Roissy Charles de Gaulle CEDEX
> ________________________________
> Pensez à l'environnement avant d'imprimer ce message.
> Think of the environment before printing this mail.
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)


Plus d'informations sur la liste de diffusion Perl