1

我在 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”位于我的桌面上,即使我指定了位置,它也不会读取文件。

任何想法让代码运行?

4

3 回答 3

2

打开失败时首先打印一条诊断消息。这是执行此操作的 Perl 方式:

open PROTEINFILE, $proteinFileName or die $!;

一些问题:

  • 您启动 Perl 程序的当前工作目录是什么?
  • 对于上面的示例,您应该 cd 到 pep 文件所在的目录。
  • 您是否从命令行启动脚本?
  • 这是否恰好是 Windows 机器上的 Cygwin-Perl?

接下来,<> 操作符从文件中读取一行。如果文件有多行,并且您想将整个文件读入字符串,则需要一个循环将所有行连接到其中:

$protein .= $_ while (<PROTEINFILE>);
于 2013-08-06T05:31:11.890 回答
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);
于 2013-08-06T05:46:22.847 回答
0

您的代码读取文件的第一行。
使用File::Slurp模块将整个文件读入变量尝试下面的代码。

# !/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”以通读文件末尾。

于 2013-08-06T06:01:27.330 回答