少し編集した.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 番目だけでなく、ファイルの 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 ファイルからどのように入力しているかを見てください。これで何年も立ち往生しています.....