如何打开Perl文件夹中的所有文件,以便计算它们?

时间:2015-04-20 07:57:44

标签: matlab perl file

我是数学和生物学研究的学生。最近我被要求生成一系列蛋白质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,");

1 个答案:

答案 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的第二个参数是文件名。这是您找到的示例中的变量$pdbfopen如果失败则返回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