以下に示すコードのデバッグについて助けが必要です。この質問の同様のバージョンを尋ねましたが、機能するスクリプトを開発できませんでした。私の入力ファイルは次のようなものです:
line1
AAAAAAAAAAAAAAA
line2
BBBBBBBBBBBBBBBB
line3
CCCCCCCCCCCCCCC
line4
DDDDDDDDDDDDDDD
次のように、スクリプトでファイル内の行をランダムにシャッフルしたいと思います。
ライン 2 BBBBBBBBBBBBBBBライン 1 AAAAAAAAAAAAAAA ライン 4 DDDDDDDDDDDDDDD ライン 3
CCCCCCCCCCCCCCC
ファイルにはかなりの数の行 (~1,000,000) が含まれています。現在、次のエラーが発生します。
Global symbol "$header_size" requires explicit package name at fasta_corrector9.pl line 40.
と
Global symbol "$header_size" requires explicit package name at fasta_corrector9.pl line 47.
$header_size
明示的なパッケージ名を付ける方法がわかりません。私はプログラマーではないので、非常に基本的な説明が必要です。前もって感謝します。
#! /usr/bin/perl
use strict;
use warnings;
print "Please enter filename (without extension): ";
my $input = <>;
chomp($input);
print "Please enter total no. of sequence in fasta file: ";
my $orig_size = <> * 2 - 1;
chomp($orig_size);
open(INFILE, "$input.fasta") or die "Error opening input file for shuffling!";
open(SHUFFLED, ">" . "$input" . "_shuffled.fasta")
or die "Error creating shuffled output file!";
my @array = (0); # Need to initialise 1st element in array1&2 for the shift function
my @array2 = (0);
my $i = 1;
my $index = 0;
my $index2 = 0;
while (my @line = <INFILE>) {
while ($i <= $orig_size) {
$array[$i] = $line[$index];
$array[$i] =~ s/(.)\s/$1/seg;
$index++;
$array2[$i] = $line[$index];
$array2[$i] =~ s/(.)\s/$1/seg;
$i++;
$index++;
}
}
my $array = shift(@array);
my $array2 = shift(@array2);
for $i (reverse 0 .. $header_size) {
my $j = int rand($i + 1);
next if $i == $j;
@array[$i, $j] = @array[$j, $i];
@array2[$i, $j] = @array2[$j, $i];
}
while ($index2 <= $header_size) {
print SHUFFLED "$array[$index2]\n";
print SHUFFLED "$array2[$index2]\n";
$index2++;
}
close(INFILE);
close(SHUFFLED);