Я начинаю с Perl и пытаюсь написать скрипт для сравнения двух хэшей и распечатать значения в первом хэше, которые не найдены во втором. Хотя я знаю, что сценарий должен быть очень простым, я не уверен, почему мой не работает. Любая помощь приветствуется.Perl сравнение двух хешей
Мой сценарий до сих пор:
#!/usr/bin/perl
use strict;
use warnings;
use vars qw($a $b $c $d $hash1 %hash1 $info1 $hash2 %hash2);
open (FILE1, "<file1.txt") || die "$!\n Couldn't open file1.txt\n";
while (<FILE1>){
chomp (my $line=$_);
my ($a, $b, $c, $d) = split (/\t/, $line);
if ($a){
$hash1 -> {$a} -> {info1} = "$b\t$c\t$d";
}
$info1=$hash1->{$a}->{info1};
}
open (FILE2, "<file2.txt") || die "$!\n Couldnt open file2.txt \n";
open (Output, ">Output.txt")||die "Can't Open Output file";
while (<FILE2>) {
chomp (my $line=$_);
my ($a, $b, $c, $d) = split (/\t/, $line);
if ($a){
$hash2 -> {$a} -> {info2} = "$b\t$c\t$d";
}
foreach (my $hash1->{$a}) {
if (!exists $hash2{$a}) {
print Output "$a\t$info1\n";
}
}
}
close FILE1;
close FILE2;
close Output;
print "Done!\n";
Имея разные переменные с тем же именем (кроме сигилы), как '% hash1' и' $ hash1' только идти чтобы вызвать у вас горе. –
В этом крошечном сценарии существует огромное количество плохих практик. Я настоятельно рекомендую читать _Perl Best Practices_, чтобы избежать некоторых ошибок в использовании Perl. Нет необходимости формировать вредные привычки при изучении Perl нового в данный момент времени. – b4hand
В частности, прагма 'use vars' сильно обескуражена. Кроме того, мы не можем видеть, что представляют собой ваши входные файлы. Поэтому сложно сказать, что пытается сделать ваша программа. – b4hand