Lo que he dicho antes... era un problema de los tabuladores...
Si no sabemos el formato del fichero, pues pasan estas cosas.
De lo que muestras deduzco que en el primer mensaje sobran caracteres en blanco. Y del segundo fichero, que hay caracteres en blanco además de tabuladores.
Con esta versión, cambiamos el análisis de tabuladores por espacios en blanco, que es más general:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
use Data
::Dumper;
if (@ARGV != 3
) {
die "La linea de ejecución del programa debe ser: ortologos.pl genesZfin.tsv moddanre.txt ortologos.txt\n";
}
my ($fichero_genes, $fichero_moddanre, $fichero_ortologos) = @ARGV;
## Leemos el fichero de genesZfin
my @zfin;
open GENESZFIN
,"<$fichero_genes" or die "No puedo abrir el fichero $fichero_genes\n";
while (<GENESZFIN>) {
if (/(ZDB\S+)/) {
push @zfin, $1;
}
}
close GENESZFIN
;
print Dumper
\@zfin;
## Leemos el fichero moddanre
my %idanimala;
open MODDANRE
, "<$fichero_moddanre" or die "No puedo abrir el fichero $fichero_moddanre\n";
while (<MODDANRE>) {
if (/^ZDB/) {
my @moddan = split;
if ($moddan[1
] eq '100.00%' and $moddan[3
] eq '100.00%') {
$idanimala{$moddan[0
]} = join "\t", @moddan;
}
}
}
close MODDANRE
;
print Dumper
\%idanimala;
## Búsqueda de coincidencias
open ORTOLOGOS
, ">$fichero_ortologos" or die "No puedo escribir en $fichero_ortologos: $!\n";
for my $gen (@zfin) {
if ($idanimala{$gen}) {
print ORTOLOGOS
$idanimala{$gen}, "\n";
}
}
close ORTOLOGOS
;Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Para el primer fichero, solo miramos si la línea coincide con el patrón
/(ZDB\S+)/, que quiere decir que capture cualquier cosa que empiece por
ZDB y le sigan caracteres que no sean caracteres en blanco (
\S+).
Para el segundo fichero, primero miramos si empieza por
ZDB, y si es así, cortamos la línea en 4 partes que sabemos que están separadas por espacios en blanco.
Ahora que ya sabemos el formato de los ficheros, el programa se hace más corto: los chomp() han desaparecido, el split() se ha simplificado...