Arrays 从文件中的数据生成数组并减去它们

Arrays 从文件中的数据生成数组并减去它们,arrays,perl,split,protein-database,Arrays,Perl,Split,Protein Database,我试图从蛋白质数据库文件(PDB)中找到三维物体之间的距离。PDB文件如下所示 例如: ATOM 1 N GLU 1 -19.992 -2.816 36.359 0.00 0.00 PROT ATOM 2 HT1 GLU 1 -19.781 -1.880 35.958 0.00 0.00 PROT ATOM 3 HT2 GLU 1 -19.713 -2.740 37.358

我试图从蛋白质数据库文件(PDB)中找到三维物体之间的距离。PDB文件如下所示

例如:

ATOM      1  N   GLU    1     -19.992  -2.816  36.359  0.00  0.00      PROT
ATOM      2  HT1 GLU    1     -19.781  -1.880  35.958  0.00  0.00      PROT
ATOM      3  HT2 GLU    1     -19.713  -2.740  37.358  0.00  0.00      PROT
ATOM      4  HT3 GLU    1     -21.027  -2.910  36.393  0.00  0.00      PROT
ATOM      5  CA  GLU    1     -19.344  -3.944  35.652  0.00  0.00      PROT
ATOM      6  HA  GLU    1     -19.817  -4.852  35.998  0.00  0.00      PROT
ATOM      7  CB  GLU    1     -19.501  -3.795  34.119  0.00  0.00      PROT
我试图将第一行5位数字作为x坐标,并将它们放入一个数组中。最后一列显示
PROT
的内容将在稍后的PDB文件中更改为
MEM1
。我试图将
MEM1
x坐标从
Prot
x坐标中减去所有
MEM1
x坐标,方法是将它们放入两个数组中

我目前有:

#!/usr/bin/perl

use warnings;

my $inputfile = '8ns_emb_alt_101.pdb';

open( INPUTFILE, "<", $inputfile ) or die $!;

my @array = <INPUTFILE>;

$protein = 'PROT';

for ( $line = 0; $line <= $#array; ++$line ) {
    if ( $array[$line] =~ m/\s+$protein\s+/ ) {
        chomp $array[$line];
        @splitline = ( split /\s+/, $array[$line] );
        @protx = $splitline[5];
    }    #if 1
}    # for 1

print "@protx \n";
print "$splitline[5] \n";
#/usr/bin/perl
使用警告;
my$inputfile='8ns_emb_alt_101.pdb';

打开(INPUTFILE,“,而不是将值分配给数组(实际上,数组将其分配给其第一个元素,覆盖先前分配的值)

将值推入其中:

push @protx, $splitline[5];

确保脚本顶部始终有
use strict;
,以消除错误(您需要使用
my
声明变量)。除非您需要知道行号,否则使用
for(@array)遍历数组要容易得多
$将被设置为当前数组元素。您还需要考虑存储每行的唯一标识符,即col 3、N/HT1/HT2/HT3等?
push @protx, $splitline[5];