我是数学和生物学研究的学生。最近我被要求生成一系列蛋白质pdb文件的文件并计算他们的联系顺序。我已经使用MATLAB在一个目录中生成了文件。
剩下要做的唯一事情是计算这些文件的联系顺序。我在Perl中找到了一份计算http://www.bakerlab.org/contact_order/contactOrder.pl
联系订单的程序以下是我的尝试:
我之前从未使用过Perl。我读了文件,找到了输入部分: 打开(PDBFILE,$ pdbf)
我将示例pdb文件放在同一目录中并写入
open(PDBFILE, $pdbf,"1ZTU.pdb");
执行程序后没有结果。
然后有人告诉我打开文件的正确方法是:
my $pdbf = "1ZTU.pdb";
open(PDBFILE, $pdbf) or die "Unable to open '$pdbf' for read: $!";
但我注意到脚本的前几行是:
my ($absolute,$relative,$cutoff,$last_res);
my %opts = &getCommandLineOptions ();
$absolute = (exists $opts{'a'}) ? 1 : 0;
$relative = (exists $opts{'r'}) ? 1 : 0;
$relative = 1 if (!($absolute || $relative));
$cutoff = $opts{'c'} if exists $opts{'c'};
$cutoff ||= 6.0;
$cutoff *= $cutoff; #actually uses squared distance cutoff
unless (@ARGV == 1){die "$helpStr";}
#main function
{
my %atm;
my ($last_id,$chain_id,$max_res,$min_res,$non_seq_flag,$res,$last_res);
my @atom_list;
my $first_pass = 1;
my $pdbf = $ARGV[0];
chomp $pdbf;
open(PDBFILE, $pdbf,");
答案 0 :(得分:0)
编辑:从评论中看来,您误解了文件名的传递方式,它是从$ARGV[0]
读取的。这是第一个命令行参数 - 它不会提示你!所以运行程序为:
perl contactOrder.pl 1ZTU.pdb
YAE(又一编辑):
要为当前目录中的每个.pdb
文件运行此脚本,请创建一个新的Perl脚本,假设它名为runem.pl
,其中包含以下内容:
use strict;
use warnings;
for my $filename (glob('*.pdb')) {
my $cmd = "perl contactOrder.pl $filename";
print "Running $cmd ...\n";
my $retn = system("$cmd");
die "'$cmd' error $retn: $!" if $retn;
}
使用cmd.exe
perl runem.pl
运行此操作
以下说明open
声明(您原来的问题):
open
的第二个参数是文件名。这是您找到的示例中的变量$pdbf
。 open
如果失败则返回False,因此打开一个文件以进行读取并进行错误处理:
my $pdbf = $ARGV[0];
open(PDBFILE, $pdbf) or die "Unable to open '$pdbf' for read: $!";
原始代码中的chomp
不是必需的。
您链接的示例代码未检测到错误,这是相当乐观的。
您现在可能不需要担心这一点,但不推荐使用大写文件句柄(PDBFILE
),使用词法文件句柄是首选:
my $pdbf = $ARGV[0];
open(my $pdbfile, $pdbf) or die "Unable to open '$pdbf' for read: $!";
然后在$pdbfile
使用的任何地方使用PDBFILE
。