我在程序中使用不同文件的相同位代码几次没有问题:
#if the info is part of a file
if($proteinIn =~ m/\.txt$/i){
my $input_file = catfile('..', dataset => $proteinIn);
open my $protein_file, '<', $input_file
or die "couldn't open '$input_file': $!";
while (my $protLine = <$protein_file>) {
print $protLine."\n";
$protLine =~ s/\s+\z//; # remove all trailing space
$protein{$protLine} = 1;
}
close $protein_file;
}
在阅读包含此
的文件时Q5KDZ7_CRYNJ
Q2U9C0_ASPOR
Q2U048_ASPOR
G2Q3M9_THIHA
G2QAZ2_THIHA
print语句“print $ protLine。”\ n“;”只打印最后一行。在这种情况下:
G2QAZ2_THIHA
我程序中的另一个例子是读取给定文件的每一行
foreach my $tempFile(@fileList){
my $input_file = catfile('..', dataset => $tempFile);
open my $ps_file, '<', $input_file
or die "couldn't open '$input_file': $!";
while (my $line = <$ps_file>) {
$line =~ s/\s+\z//; # remove all trailing space
my @curLine = split /\t/, $line;
<the rest of the program>
此代码打开的文件包含以下行:
>sp|Q6GZX4|001R_FRG3G Putative transcription factor 001R OS=Frog virus 3 (isolate Goorha) GN=FV3-001R PE=4 SV=1 MAFSAEDVLKEYDRRRRMEALLLSLYYPNDRKLLDYKEWSPPRVQVECPKAPVEWNNPPSEKGLIVGHFSGIKYKGEKAQASEVDVNKMCCWVSKFKDAMRRYQGIQTCKIPGKVLSDLDAKIKAYNLTVEGVEGFVRYSRVTKQHVAAFLKELRHSKQYENVNLIHYILTDKRVDIQHLEKDLVKDFKALVESAHRMRQGHMINVKYILYQLLKKHGHGPDGPDILTVKTGSKGVLYDDSFRKIYTDLGWKFTPL FRG3G
为什么代码的第一个例子只打印文件的最后一行?
编辑:回复评论问题是代码的上游;幸运的是我的问题接近开头所以这里是问题代码之前的一切
运行代码时,我使用命令“perl regProt.pl”“”truePool.txt“”uniprot_sprot.dat“”fungi“
#!/usr/bin/env perl
use strict;
use File::Spec::Functions qw( catfile );
#use warnings;
#@author David Dziak
#A program for quick regex functions on uniprot data to test protein signatures
#my $max = 325783;
#my $cur = 0;
my $annotation;
my $fingerprint = $ARGV[0];
unless($fingerprint){
$fingerprint = "[GASRK][KRVSG][RKVI][KRVI]x[ASCR]x[AST]x(0,45)[GATF]xxx[VLI]N[GKND]x(11,12)[RKL]x(16,18)[NDA]x(6)[GS]GGx(10)[AG][LIVM][GAS][KR][GASN][VLI]";#prosite s9
#$fingerprint = "[GS]Gx(2)[GSA][QK]x(2)[SA]x(3)[GSA]x[GSTAV][KR][GSALVD][LIFV]";#prosite s9
#$fingerprint = "[STDNQ]G[KRNQMHSI]x(6)[LIVM]x(4)[LIVMC][GSD]x(2)[LFI][GAS][DE][FYM]x(2)[ST]";#prosite s19
#$fingerprint = "[RKHN][KSTR]X(3)[AVSCR]X(6)GXGX(0,23)X(25)GGGX(2)[GAS][QRKS]X(0,50)X(20)[APS]RX(5)[VSTA]XR";#s9
#$fingerprint = "[GAR][RKHG][RKHNT][KSTR]X(3)[AVSCR][RASTHKQLP]X(5)[GPSTND]X[GPSTKDQ]X(4)[NDVGIT]X(0,60)G[GS]GX(2)[GSA][QRS]X(0,70)[QTRA][FWYETK][STAVH][KY][RK]";#s9
#$fingerprint = "[RGWCKT]X(5)PX(3)[GARDENS]X(4)[VIL][HYF]XGX(7)[LIVMP]X(7)x[LFI][GASR][DEA][FYME]";#s19
}
$annotation .= $fingerprint;
#protein name to search
my $proteinIn = $ARGV[1];
my %protein;
#if the info is part of a file
if($proteinIn =~ m/\.txt$/i){
my $input_file = catfile('..', dataset => $proteinIn);
答案 0 :(得分:2)
我认为您的文件由于某种原因的行分隔为\r
,而不是\n
。
尝试置顶:
use Data::Dumper;
$Data::Dumper::Useqq=1;
并用以下内容替换印刷品:
print Data::Dumper::Dumper($protLine);