Manipulation de tableaux en perl

Bonjour,

j'aurais besoin d'un peu d'aide ne Perl. Je fais du Perl 2 fois par ans, et je galère pas mal avec la manipulation de tableaux (je ne suis pas informaticien ni développeur, mais médecin).

Je pars de deux tableaux :
@Vrac = Lundi Novembre Mardi Mercredi
@Semaine = Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimnanche

Je souhaiterais lire chaque valeur de mon tableau @Vrac, et vérifier la présence de la valeur en cours de lecture dans le tableau @Semaine.
Je voudrias alors nettoyer mon tableaun @Vrac de svaleurs non conformes (c'est à dire absentes du tableau) et mettre ces valeurs hors norme dans un tableau @anomalie.

Au final je souhaiterais avoir les tableaux suivants :
@Vrac = Lundi Mardi Mercredi
@anomalie = Novembre

Quelqu'un pourrait m'aider ?

Merci.

Alain.

3 réponses

  1. Modérateur
    Salut,

    root@debian:~# cat ccm.pl
    #!/usr/bin/perl
    use strict;use warnings;
    
    my @vrac = qw/Lundi Novembre Mardi Mercredi/;
    my @semaine = qw/Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche/;
    
    my %vu_dans_semaine;
    my @pas_dans_vrac;
    my(@normal,@anomalie);
    
    @vu_dans_semaine{@semaine} = ();
    
    for (@vrac){ push @anomalie,$_ unless exists $vu_dans_semaine{$_};
                 push @normal,$_   if exists $vu_dans_semaine{$_}    }
    
    print "\@normal = @normal\n\@anomalie = @anomalie\n";
    __END__
    root@debian:~# perl ccm.pl
    @normal = Lundi Mardi Mercredi
    @anomalie = Novembre
    root@debian:~#
    --

    lami20j
    2
    1. Modérateur
      ou plus court avec l'opérateur ternaire ?:
      #!/usr/bin/perl
      use strict;use warnings;
      
      my @vrac = qw/Lundi Novembre Mardi Mercredi/;
      my @semaine = qw/Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche/;
      
      my %vu_dans_semaine;
      my @pas_dans_vrac;
      my(@normal,@anomalie);
      
      @vu_dans_semaine{@semaine} = ();
      
      for(@vrac){exists $vu_dans_semaine{$_}?push @normal,$_:push @anomalie,$_}
      
      print "\@normal = @normal\n\@anomalie = @anomalie\n";
      __END__
      2
      1. salut,

        on utilise un tableau de hachage intermediaire (temp) pour pouvoir utiliser la fonction exists tres pratique pour vérifier si une clé existe

        my @anomalie;
        my @Vrac =(Lundi,Novembre,Mardi,Mercredi);
        my @Semaine =(Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimnanche);

        my %temp;
        @temp{@Semaine} = 0..$#Semaine;

        for my $val (@Vrac) {
        if( ! exists $temp{$val} ) {
        push (@anomalie,$val);
        }
        1