Wednesday, November 24, 2010

exercice 6: personnes: noms, ages, adresses avec table de hachage et fonctions

# exercice 6
use strict;
use warnings;

my %pers;

# importer les donnees
while (<>) {
  chomp;
  my ($nom, $age, $adresse) = split ' ', $_, 3;
  $pers{$nom} = {
    nom => $nom,
    age => $age,
    adresse => $adresse,
  };
}

#use Data::Dumper;
#print Dumper \%pers;

my ($nom, $age);
my $etape = 0;

afficher_tout();

$etape++; print "$etape. Un an passe...:\n";
for $nom (sort keys %pers) {
  $pers{$nom}->{age}++;
}

afficher_tout();

$etape++; print "$etape. Tout le monde trie par age:\n";
for $nom (sort { $pers{$a}->{age} <=> $pers{$b}->{age} } keys %pers) {
  affiche($pers{$nom});
}
$etape++; print "$etape. Tout le monde trie par adresse:\n";
for $nom (sort { $pers{$a}->{adresse} cmp $pers{$b}->{adresse} } keys %pers) {
  affiche($pers{$nom});
}

sub afficher_tout {
  $etape++; print "$etape. Les ages de tout le monde:\n";
  for $nom (sort keys %pers) {
    affiche($pers{$nom});
  }
  $etape++; print "$etape. Travailleurs:\n";
  for $nom (sort keys %pers) {
    $age = $pers{$nom}->{age};
    if ($age >= 18 && $age < 65) {
      affiche($pers{$nom});
    }
  }
}

sub affiche {
  my $pers = shift;
  printf "  %-10s %4d %s\n", $pers->{nom}, $pers->{age}, $pers->{adresse},
}

No comments:

Post a Comment