Solution1
 #!/usr/bin/perl
#-------------------------------------------------
# PROGRAMME PRINCIPAL
#-------------------------------------------------
my @LISTETOKEN=();
my @LISTELEMME=();
my @LISTEETIQUETTE=();
#--------------------------------------------------
# lecture du fichier PATRON
open(PATRON,"$ARGV[1]");
my @LISTEPATRON=; # lecture globale du fichier dans une liste
close(PATRON);
#--------------------------------------------------
# le fichier cordial est le premier argument du programme
open(CORDIAL,"$ARGV[0]");  # visiblement pas de pb d'encodage...
while (my $ligne=) {
    $ligne=~s/\r//;
    chomp($ligne);
    if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/) {
        my ($token,$lemme,$etiquette)=($1,$2,$3);
        if ($etiquette!~/PCTF/) {
            push(@LISTETOKEN,$token);
            push(@LISTELEMME,$lemme);
            push(@LISTEETIQUETTE,$etiquette);
        }
        else {
            &compare(\@LISTETOKEN,\@LISTEETIQUETTE);
            # creation d'un reference vers une liste
            @LISTETOKEN=();
            @LISTEETIQUETTE=();
            @LISTELEMME=();
        }
    }
}
# -----------------------------------------------------
# SOUS - PROGRAMMES
#------------------------------------------------------
sub compare {
    # TRAITEMENT...
    my ($first,$second)=@_;
    my @LISTETOKEN=@$first;
    my @LISTEETIQUETTE=@$second;
    foreach my $patron (@LISTEPATRON) {
        $patron=~s/\r//;
        chomp $patron;
        #print "$patron\n"; 
        my $texte_des_pos=join(" ",@LISTEETIQUETTE);
        while ($texte_des_pos=~/$patron/g) {
            my $contextebefore=$`;
            my $compteurblanc=0;
            while ($contextebefore=~/ /g) {
                $compteurblanc++;
            }
            my @MONPATRONENCOURS=split(/ /, $patron);
            my $longueurpatron=$#MONPATRONENCOURS;
            my $bornesup = $compteurblanc + $longueurpatron;
            print "@LISTETOKEN[$compteurblanc..$bornesup] \n";
        } 
    }
}

					
Solution2
 open(FILE,"$ARGV[0]");
#--------------------------------------------
# le patron cherché ici est du type NOM ADJ";
# le modifier pour extraire NOM PREP NOM
#--------------------------------------------
my @lignes=;
close(FILE);
my %dicopatron=();
while (my $ligne=shift(@lignes)) {
    chomp $ligne;
    my $sequence="";
    my $longueur=0;
    if ( $ligne =~ /^([^\t]+)\t[^\t]+\tNC.*/) {
		my $forme=$1;
		$sequence.=$forme;
		$longueur=1;
		my $nextligne=$lignes[0];
		if ( $nextligne =~ /^([^\t]+)\t[^\t]+\tADJ.*/) {
			my $forme=$1;
			$sequence.=" ".$forme;
			$longueur=2;
		}
    }
    if ($longueur == 2) {
		# print $sequence;
		$dicopatron{$sequence}++; # ou $dicopatron{$sequence}=$dicopatron{$sequence}+1;
    }
}
foreach my $patron (sort {$dicopatron{$b} <=> $dicopatron{$a}} (keys %dicopatron)) {
	print "$patron : $dicopatron{$patron}\n";
}