使用子例程将参数传递到循环 perl

passing a paramter into a loop perl using a subroutine

我想读取一个文件 1,其中每个单词都包含一个数字表示,例如:

clinton 279
capital 553
fond|fonds 1410

我读了第二个文件,每次我找到一个数字我用相应的词替换它。以上是第二个文件的示例

279 695 696 152 - 574
553 95 74 96 - 444
1410 74 95 96 - 447

我的代码中的问题是它只执行了一次子例程。它只显示:

279 clinton

通常在这个例子中它应该显示 3 个单词,当我添加 print $b;在子例程中它显示不同的数字。

#!/usr/bin/perl
use stricrt;
use warnings;
use autodie;

my @a,my $i,my $k;
my $j;

my $fich_in = "C:\charm\ats\4.con";
my $fich_nom = "C:\charm\ats\ats_dict.txt";


open(FICH1, "<$fich_in")|| die "Problème d'ouverture : $!";
open my $fh, '<', $fich_nom;

#here i put the file into a table

while (<FICH1>) {
my $ligne=$_;
chomp $ligne; 


my @numb=split(/-/,$ligne);
my $b=$numb[0];
    $k=$#uniq+1;
    print   "$b\n";
     my_handle($fh,$b);
}

sub my_handle {
    my ($handle,$b) = @_;
    my $content = '';
#print "$b\n";

    ## or line wise
    while (my $line = <$handle>){
    my @liste2=split(/\s/,$line);
if($liste2[1]==$b){
        $i=$liste2[0];
            print "$b $i";}
        }
return $i;
}


    close $fh;
    close(FIC1);

解决类似问题的常用方法是先对 "dictionary" 进行哈希处理,然后遍历第二个文件并在哈希 table:

中搜索替换项
#!/usr/bin/perl
use warnings;
use strict;

my $fich_in = '4.con';
my $fich_nom = 'ats_dict.txt';

open my $F1, '<', $fich_in  or die "Problème d'ouverture $fich_in : $!";
open my $F2, '<', $fich_nom or die "Problème d'ouverture $fich_nom : $!";;

my %to_word;
while (<$F1>) {
    my ($word, $code) = split;
    $to_word{$code} = $word;
}

while (<$F2>) {
    my ($number_string, $final_num) = split / - /;
    my @words = split ' ', $number_string;
    $words[0] = $to_word{ $words[0] } || $words[0];
    print "@words - $final_num";
}