我在perl中使用了以下代码来打开并读取包含蛋白质数据的文件:
# !/usr/bin/perl -w
$proteinFileName = 'NM_021964fragment.pep';
open (PROTEINFILE, $proteinFileName);
$protein = <PROTEINFILE>;
close PROTEINFILE;
print "Here is the protein: \n";
print "$protein";
exit;
我面临的问题是所提供的代码不会打印出数据。蛋白质序列数据文件'NM_021964fragment.pep'位于我的桌面上,即使我指定了它不读取文件的位置。
是否有想法让代码运行?
答案 0 :(得分:2)
首次打开diag消息时打开失败。这是Perl方式:
open PROTEINFILE, $proteinFileName or die $!;
有些问题:
接下来,&lt;&gt;操作员从文件中读取一行。 如果文件有多行并且您想要将整个文件读入字符串,则需要一个循环来将所有行连接到其中:
$protein .= $_ while (<PROTEINFILE>);
答案 1 :(得分:1)
我认为问题可能是因为你的perl脚本与你的蛋白质文件不在同一个目录中。你可以加载其中两个,然后再试一次。如果你想输入文件的路径作为参数,你可以写如下:
@ARGV==1 || die"please input the file path";
open(IN, $ARGV[0]) || die "can't open the file $ARGV[0]:$!";
$protein = <PROTEINFILE>; ##get one line once, if you want to get all information, use while loop or like this: @protein = <PROTEINFILE>;
##something you like to do
close(IN);
答案 2 :(得分:0)
您的代码会读取文件的第一行
使用File::Slurp
模块将整个文件读入变量 OR ,请尝试下面的代码。
# !/usr/bin/perl -w
use strict;
my $proteinFileName = 'NM_021964fragment.pep';
my $protein;
{
local $/= undef;
open (my $PROTEINFILE, '<', $proteinFileName) || die "Can't open";
$protein = <$PROTEINFILE>;
close $PROTEINFILE;
}
print "Here is the protein: \n";
print "$protein";
exit;
man perlvar
:
$ /输入记录分隔符,默认为换行符。 [...]您可以将其设置为“undef”以读取文件末尾。