[Perl] Autoconstruire du code perl dans un switch

Guerlais, Patrice (ITOP TD) - AF paguerlais at airfrance.fr
Mer 3 Juil 10:11:22 CEST 2024


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.


Plus d'informations sur la liste de diffusion Perl