我有一个 .pl 文件,我对其进行了一些编辑,但是当我尝试运行它时出现此错误
Use of uninitialized value within %dca in concatenation (.) or string at ./createWindow.pl line 65.
Use of uninitialized value in concatenation (.) or string at ./createWindow.pl line 64.
Use of uninitialized value in concatenation (.) or string at ./createWindow.pl line 64.
Use of uninitialized value within %dca in concatenation (.) or string at ./createWindow.pl line 65.
以下代码是
#!/usr/bin/perl -w
use strict;
my $window=$ARGV[0];
my $windowCentral=$ARGV[1];
my $sep=$ARGV[2];
my @pairs=`cat $ARGV[3]`;
chomp @pairs;
my @pssm=`cat $ARGV[4]`;
chomp @pssm;
my @predSS=`cat $ARGV[5] | cut -d, -f1`;
chomp @predSS;
my @predSA=`cat $ARGV[6]`;
chomp @predSA;
my @predRCH=`cat $ARGV[7]`;
chomp @predRCH;
my @predCN=`cat $ARGV[8]`;
chomp @predCN;
my @seq=`cat $ARGV[9]`;
chomp @seq;
my @prop=`cat ../propensity.txt | cut -d\\ -f1,3`;
chomp @prop;
my %prop;
foreach(@prop) {
my @v=split(/ /);
$prop{$v[0]}=$v[1];
}
my @dca=`cat $ARGV[10]`;
chomp @dca;
my %dca;
foreach(@dca) {
my @v=split(/ /);
$dca{"$v[0],$v[1]"}="$v[2],$v[3]";
}
my $count=0;
foreach my $pair (@pairs) {
my @values=split(/,/,$pair);
next if($values[2]<$sep);
$count++;
my $r1=$values[0]-1;
my $r2=$values[1]-1;
my $central=($r2-$r1)/2;
#separation between contactd
print "$values[2],";
#propensity
my $AApair=$seq[$r1].$seq[$r2];
print "$prop{$AApair},";
#sequence length
my $num=@seq;
print "$num,";
#dca
my $posPair="$values[0],$values[1]";
print "$dca{$posPair},";
#PredSS of windows around contact residues
&dumpWindow($r1,$window,@predSS);
&dumpWindow($r2,$window,@predSS);
其余代码工作正常,但我无法弄清楚索引 dca 哈希表。您需要文件的所有四列,而不仅仅是第 1、第 3 和第 4 列,所以不要进行剪切。
my @dca=`cat $ARGV[10]`;
> chomp @dca;
> my %dca;
> foreach(@dca) {
> my @v=split(/ /);
> $dca{$v[0]}=$v[1];
> }
哈希表的键必须是 2 个残基索引的连接,值是第 3 列和第 4 列的连接:
$dca{"$v[0],$v[1]"}="$v[2],$v[3]";
>
> my $AApair=$seq[$r1].$seq[$r2];
> print "$dca{$AApair},";
>
要索引哈希表,您需要 r1 和 r2,而不是这些位置的氨基酸。
my $posPair="$values[0],$values[1]";
print "$dca{$posPair},";
以错误的方式索引 dca 哈希表。看看你是如何从上面的几行代码的 .contact 文件中填充它的。现在卡在这个问题上了......