Элементы массива не печатаются в Perl
У меня есть два набора файлов. Один файл содержит список имен генов (по одному гену на строку). Второй файл содержит список пар генов (например, => '1,2' и одну строку perl пары генов). Имена генов являются числовыми. Я хочу перечислить все возможные комбинации генов, кроме известных пар генов.
Мой вывод должен быть:
3,4
4,5
6,7
...
...
Но я получаю что-то вроде этого =>
,4
,5
,7
Все первые элементы не печатаются. Я не уверен точно, что не так с кодом. Кто-нибудь может помочь?
Мой код:
#! usr/bin/perl
use strict;
use warnings;
if (@ARGV !=2) {
die "Usage: generate_random_pairs.pl <entrez_genes> <known_interactions>\n";
}
my ($e_file, $k_file) = @ARGV;
open (IN, $e_file) or die "Error!! Cannot open $e_file\n";
open (IN2, $k_file) or die "Error!! Cannot open $k_file\n";
my @e_file = <IN>; chomp (@e_file);
my @k_file = <IN2>; chomp (@k_file);
my (%known_interactions, %random_interactions);
foreach my $line (@k_file) {
my @array = split (/,/, $line);
$known_interactions{$array[0]} = $array[1];
}
for (my $i = 0; $i <= $#e_file; $i++) {
for (my $j = $i+1 ; $j <= $#e_file; $j++) {
if ((exists $known_interactions{$e_file[$i]}) && ($known_interactions{$e_file[$i]} == $e_file[$j])) {next;}
if ((exists $known_interactions{$e_file[$j]}) && ($known_interactions{$e_file[$j]} == $e_file[$i])) {next;}
print "$e_file[$i],$e_file[$j]\n";
}
}
1 ответ
Решение
Ваш файл использует CR LF для окончания строки, но вы находитесь в системе, которая использует LF для окончания строки, поэтому ваша программа выводит
"3" <CR> "," "4" <CR> <LF>
который ваш терминал показывает как
,4
Либо исправьте окончания строк, используя
dos2unix inputfile
Или поменять
chomp(@e_file);
chomp(@k_file);
в
s/\s+\z// for @e_file;
s/\s+\z// for @k_file;