어떻게 이것을 벗어날 수 있는지 알 수 없었습니다.두 개의 루프 안에있는 변수를 인쇄하십시오.
두 개의 루프 안에있는 변수 $rfam_column
을 인쇄하고 싶습니다. 하지만 $rfam_column
이 나타나는 곳 바로 뒤에 print
명령을 쓸 수는 없습니다. 루프 외부에있는 다른 내용을 인쇄하여 인쇄 된 내용과 결합하기를 원하기 때문입니다.
여기에서 내가 잘못하고있는 것에 대한 조언을 주시면 감사하겠습니다.
use warnings;
use strict;
my $in;
GetOptions('input' => \$in) or die;
if ($in) {
my $input = $ARGV[0] or die;
open (my $fh, '<', $input) or die "Can't open $input $!\n";
chomp (my @db_file = <$fh>);
close $fh;
my @list = grep /RNA/, @db_file;
my $column;
my @column =();
foreach $column (@list) {
my @all_columns = split (/\t/, $column);
my $rfam_column = $all_columns[0];
# insert "|" between RFs
foreach $_ ($rfam_column) {
s/^/|/;
}
}
}
print "$rfam_column";
Global symbol "$rfam_column" requires explicit package name at script_vbeta.pl line 90. Execution of script_vbeta.pl aborted due to compilation errors.
모든 코드와 입력 된 정보를 포함하도록 편집 - 제안 출력 :
입력 파일이 같은 N 라인 VS N 열 테이블 (I이고 그렇지 않으면 한 줄로 표현하는 것이 훨씬 길어질 것입니다.) :
RF00001 1302 5S ribosomal RNA
RF00006 1307 Vault RNA
RF00007 1308 U12 minor spliceosomal RNA
RF00008 1309 Hammerhead ribozyme (type III)
출력은 다음과 같아야합니다. 이 :
|RF00001|RF00006|RF00007
그리고 코드 (사용 : script.pl -i INPUT_FILE) :
use warnings;
use strict;
use Getopt::Long;
Getopt::Long::Configure("pass_through");
my $in;
GetOptions('input' => \$in) or die;
if ($in) {
my $input = $ARGV[0] or die;
open (my $fh, '<', $input) or die "Can't open $input $!\n";
chomp (my @db_file = <$fh>);
close $fh;
my @list = grep /RNA/, @db_file;
my $column;
my @column =();
foreach $column (@list) {
my @all_columns = split (/\t/, $column);
my $rfam_column = $all_columns[0];
# insert "|" between RFs
foreach $_ ($rfam_column) {
s/^/|/;
}
}
}
print "$rfam_column";
쇼 샘플 입력 (복수 RNA 라인) 파일 어떤 출력 당신이 당신의 실제 프로그램을 제시해주십시오 – ysth
을하고자하는 원하는 생각합니다. 당신이'Undefined subroutine & main :: GetOptions'로 죽었다는 것을 보여주었습니다. – Borodin
프로그램을 더 읽기 쉽게 만들면 많은 도움이 될 것입니다. ysth와 나는 우리가 직접 읽을 수 있도록 여기까지했다. – Borodin