2 つの値を文字列に貼り付けようとしています。1 つの値は配列要素で、もう 1 つはハッシュマップ値です。しかし、私はこのエラーを抱え続けています:
Use of uninitialized value in concatenation (.) or string
at makeNewCSV.pl line 104, <$fh> line 2020.
これは私のコードです:
use feature qq(say);
my @nodeIdArray;
my @sequenceArray;
my @completeLineArray;
my %fastaHash = ();
[...]
sub readCsv{#Reads the CSV and puts all the Node ID's in an array
my ($file) = @_;
my $nodeID = qr{\d+\,(\d+)};
open(my $fh, '<', $file) or die "Error while reading CSV: $!";
while(my $line = <$fh>){
if($line =~ $nodeID){
push(@nodeIdArray, $1);
}
}
close($fh);
searchFasta();
}
sub searchFasta{#Reads and searches the fasta file for contigs with a matching node ID
my ($file) = $ARGV[1];
my $fastaNodeID = qr{>NODE_(\d+)_LENGTH_\d+_COV_[\d.]+\n([ACTGN\n]+)};
my @matches;
open(my $fh, '<', $file) or die "Error while reading fasta: $!";
my @allLines = <$fh>;
my $makeString = join('', @allLines);
my $lineAsString = uc($makeString);
while($lineAsString =~ m/$fastaNodeID/g){
my $node_ID = $1;
my $sequence = $2;
$sequence =~ s/\n//;
$fastaHash{$node_ID} = $sequence;
}
close($fh);
pasteLines();
}
sub pasteLines{
my $fullLine = "";
my $file = $ARGV[0];
my @hashKeys = keys(%fastaHash);
my $index = 0;
my $numberOfRepeat = 0;
open(my $fh, '<', $file) or die "Error while reading CSV (2): $!";
my @allLines = <$fh>;
my $arrayLength = @allLines;
foreach my $line(@allLines){
chomp($line);
}
while($numberOfRepeat <= $arrayLength){
foreach my $key(@hashKeys){
if($key = $nodeIdArray[$index]){
no warnings qw(uninitialized); #DEBUG:
say qq(DEBUG: \$fastaHash{$key} = "$fastaHash{$key}");
say qq(DEBUG: \$fullLine = $allLines[$index] . "," . $fastaHash{$key};);
use warnings qw(uninitialized); #DEBUG:
$fullLine = $allLines[$index] . "," . $fastaHash{$key}; #This line here gives the problems
push(@completeLineArray, $fullLine);
$index++;
}
else{
$index++;
}
}
}
close($fh);
}
$index は配列をループするためのもので、 @allLines には読み取りファイルからのすべての行が含まれています。(<$fh>
私のファイルハンドルです)。
編集 22-10-2012:変数が作成された場所を示すためにコード全体を追加しました