首页 > 解决方案 > 使用 while 循环和 $_ 读取 PDB 文件时出错

问题描述

我对 Perl 不是很熟悉,但我正在尝试让其他人编写的一些旧代码正常工作。代码的目标是在以 file.pdb 结尾的输入文件上运行一个名为 stride 的程序。它应该抓取目录中的所有 .pdb 文件,运行 stride 并创建输出文件。我知道 stride 程序可以独立运行,但是当我尝试运行代码时出现以下错误:“读取 PDB 文件 _file.pdb 时出错”。在其他类似的代码中,我得到更具体的错误“全局符号“$ original_filename”需要显式包名”。我想我已经将问题缩小到代码对 $_ 的使用。我将不胜感激有关此代码为何不再有效以及更新版本的外观的任何帮助。谢谢。(注意,use strict 和 warnings 已被删除,因为它不是原始代码的一部分)。

#!/usr/bin/perl
#use strict;
#use warnings;


while(<>){
    chomp;
        my $input = "$_"."_file.pdb";
        my $output = "$_".".stride";
        my $command = "stride "."$input -f"."$output"." -cA";
        system($command);
}

标签: perl

解决方案


该短语从命令行中给出的所有文件中while (<>)读取每一行。

该代码似乎适用于文件名,它们位于 中@ARGV,因此最简单的更改是

foreach (@ARGV) { ... }

现在$_在循环体中一次只有一个文件名(或在命令行上提供给程序的任何文件名)。

<>请参阅 perlop中I/O 运算符中的“空文件句柄”


推荐阅读