Code :
 #!/usr/bin/perl #fichier blocksfile.pl use strict; use warnings; use autodie  qw(open close);    # open/close succeed or die   my $filename = "blocksfile.txt"; #nom du fichier en entrée open my $fh,  '<',  $filename;  my $savedprefix = "savedblock"; #préfixe des fichiers sauvés my $savedfh; my $inblock = 0; #flag pour savoir si la ligne est dans un bloc ouvert my $numblock = 0; # compte des débuts de blocs rencontrés while (<$fh> ) {   if (/^. {6}\ s\d {2}\ s. {6}$/o ) { #pattern de ligne pour 6 caracteres, un blanc, deux chiffres, un blanc, 6 caracteres     if ($inblock) { # on a trouvé un début alors qu'on est déja dans un bloc ouvert       print "Warning: Block $numblock incorrectly closed:skipped\n";        unlink $savedprefix. $numblock. ".txt";  #on efface le fichier de bloc incorrect     }     # bon on est maintenant prêt a traiter le cas de rencontre d'un nouveau bloc     $inblock = 1; # flag mis à 1     $numblock++; # cpteur incrémenté     open $savedfh,  '>',  $savedprefix. $numblock. ".txt";  # on ouvre un nouveau fichier de block à sauver     binmode $savedfh;  # mode binaire à tout hasard, comme je ne connais pas tes données     print $savedfh $_;  # on écrit la ligne dans le fichier de block à sauver (pas clair si ca doit être fait dans ton cas)   }   elsif (/^nnnn$/) {     if ($inblock) { # on a rencontré une fin de block pour un block ouvert       print $savedfh $_;  # on écrit la ligne dans le fichier de block à sauver (pas clair si ca doit être fait dans ton cas)       close $savedfh;  #on ferme le fichier       $inblock = 0; #on positionne le flag a 0     }     # et traitement en erreur sinon?   }   elsif ($inblock) { #ligne standard dans un bloc ouvert     print $savedfh $_;  # on écrit la ligne dans le fichier de block à sauver   } } if ($inblock) {   print "Warning: Block $numblock incorrectly closed:skipped\n";    unlink $savedprefix. $numblock. ".txt";  } 
 
  |