Perl将数组内容与哈希值进行比较

时间:2016-07-29 10:45:04

标签: arrays perl hash

我正在尝试检查散列中文件中是否存在单词,如果是,则显示相应的散列键和值。

到目前为止,我已经能够使用数组@motcherches来执行此操作。这些值在脚本中给出。

我找不到从外部文件(此处为FILEDEUX)为此数组字赋值的方法。 你能指出我正确的方向吗?

(请不要犹豫,纠正我解释问题的方法。)

#!/usr/bin/perl
use v5.10;
use strict;
use warnings;
my $hashtable = $ARGV[0];
my $textecompare = $ARGV[1];
open FILE,"<$hashtable" or die "Could not open $hashtable: $!\n";
open FILEDEUX,"<$textecompare" or die "Could not open $textecompare: $!\n";


    while ( my $line = <FILE>)
    {
        chomp($line);
        my %elements = split(" ",$line);

        my @motcherches = qw/blop blup blip blap/;
        foreach my $motcherches (@motcherches) {

            while ((my $key, my $value) = each (%elements)) {
                # Check if element is in hash :
                say "$key , $value" if (exists $elements{$motcherches}) ;
            }
        }
    }

close FILE;
close FILEDEUX;

编辑:示例输入

FILE(转化为%elements哈希)

Zieler player
Chilwell player
Ulloa player
Mahrez player
Ranieri coach

=============================================== =============================

FILEDEUX(转换为motcherches数组)

一次豁免很快就会被另一次拯救,而这次Zieler必须更加清晰,以防止它出现。 Izaguirre让Mahrez尝试了自己的药物,尽管莱斯特边锋太过轻易放弃了,但他的所有目的都击败了左翼。 到目前为止,克劳迪奥·拉涅利将对他从他身边看到的东西感到高兴。

=============================================== ==============================

预期产出:

Zieler player
Mahrez player
Ranieri coach

2 个答案:

答案 0 :(得分:1)

一切都很好,但在程序中添加chomp

  while ( my $line = <FILE>)
  {
     chomp($line);
     my %elements = split(" ",$line);

答案 1 :(得分:1)

use strict;
use warnings;
use feature qw/ say /;  

# Read in your paragraph of text here:
open my $text, '<', 'in.txt' or die $!; 

my %data;
while(<$text>){
    chomp;
    $data{$_}++ for split; # by default split splits on ' '
}

my %players;
while(<DATA>){
    chomp;
    my @field = split;
    say if $data{$field[0]};
}


__DATA__
Zieler player
Chilwell player
Ulloa player
Mahrez player
Ranieri coach