Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Getopt::Long::描述性-如何声明变量_Perl - Fatal编程技术网

Perl Getopt::Long::描述性-如何声明变量

Perl Getopt::Long::描述性-如何声明变量,perl,Perl,我试图通过命令行指定变量,但不确定如何声明变量。以下是错误: $ perl make_keggTable.pl -i ko2genes.pau -o pau Global symbol "$inlocus" requires explicit package name at make_keggTable.pl line 126. Global symbol "$inlocus" requires explicit package name at make_keggTable.pl line 12

我试图通过命令行指定变量,但不确定如何声明变量。以下是错误:

$ perl make_keggTable.pl -i ko2genes.pau -o pau
Global symbol "$inlocus" requires explicit package name at make_keggTable.pl line 126.
Global symbol "$inlocus" requires explicit package name at make_keggTable.pl line 126.
Global symbol "$orgCode" requires explicit package name at make_keggTable.pl line 133.
Global symbol "$orgCode" requires explicit package name at make_keggTable.pl line 146.
我的代码:

use strict;
use warnings; 
use Data::Dumper;
use Getopt::Long::Descriptive;
#use Getopt::Long;
#use Pod::Usage;

## usage and help info
my ( $opt, $usage ) = describe_options(
'make_keggTable.pl  %o',
[ 'inlocus|i=s', 'file of NCBI locus IDS to Kegg KOs' ],
[ 'orgCode|o=s', 'kegg organism code(Pseu.PA14=pau, Pseu.PA01=pae,Salm.14028S=seo,Salm.LT2=stm,Ecoli.MG1655=eco)'],
[],
[ 'verbose|v', 'print with verbosity' ],
[ 'help',      'print usage message and exit' ],
);

if ($opt->help) {
  print $usage->text, "\n";
}
##
### read in NCBIgenID to KO for organism
# pau:PA14_00010        K02313
#my $inlocus=$ARGV[0] || "ko2genes.pau";
#my $orgCode=$ARGV[1] || "pau";
open (IN, $inlocus) or die "cannot open $inlocus\n";
my %HoLoc2ko;
while (my $line =<IN>){
    next if ($line =~ /^\s*$/);
    next if ($line =~ /^#/);
    chomp $line;
    my ($locus,$ko)=split(/\s/,$line);
    $locus =~ s/$orgCode//;
    if ($ko =~ /ko:/) {
            $ko =~ s/ko:// ;
    }
    if (defined($locus) && defined ($ko)) { # leave as array although it looks like all loci are only assigned to one ko
            push @{$HoLoc2ko{$locus}},$ko;
    }
}
close (IN);
print "read in ko info for\t".scalar(keys %HoLoc2ko)."\tNCBI locis\n";
#print "Loc2ko\n".Dumper(%HoLoc2ko)."\n";
使用严格;
使用警告;
使用数据::转储程序;
使用Getopt::Long::描述性;
#使用Getopt::Long;
#使用Pod::用法;
##用法和帮助信息
我的($opt$usage)=描述选项(
“make_keggTable.pl%o”,
['inlocus | i=s','NCBI位点ID文件到Kegg KOs'],
['orgCode | o=s','kegg有机体代码(Pseu.PA14=pau,Pseu.PA01=pae,Salm.14028S=seo,Salm.LT2=stm,Ecoli.MG1655=eco)],
[],
['verbose | v','print with verbosity'],
[“帮助”,“打印使用信息并退出”],
);
如果($opt->help){
打印$usage->文本“\n”;
}
##
###读入NCBIgenID至KO中的有机体
#pau:PA14_00010 K02313
#my$inlocus=$ARGV[0]| |“ko2genes.pau”;
#我的$orgCode=$ARGV[1]| |“pau”;
打开(在$inlocus中)或死亡“无法打开$inlocus\n”;
我的%HoLoc2ko;
while(我的$line=){
下一个if($line=~/^\s*$/);
下一个if($line=~/^#/);
chomp$行;
my($locus,$ko)=拆分(/\s/,$line);
$locus=~s/$orgCode/;
如果($ko=~/ko:/){
$ko=~s/ko://;
}
if(defined($locus)&&defined($ko)){#保留为数组,尽管看起来所有的位点都只分配给一个ko
推{$HoLoc2ko{$locus}},$ko;
}
}
关闭(IN);
打印“读取\t的ko信息”。标量(键%HoLoc2ko)。“\tNCBI locis\n”;
#打印“Loc2ko\n”。转储程序(%HoLoc2ko)。“\n”;

您不需要使用声明其他标量变量。只需使用以下符号:

open (IN, $opt->inlocus) or die "cannot open ", $opt->inlocus, "\n";

您在
open
之前已经注释了几行。但是如果我使用get::opt as perl make_keggTable.pl-I ko2genes.pau-o pau声明它们,我还需要它们吗?