2013-09-25 3 views
2

Я новичок в getopt: long. Я попытался указать переменную через командную строку, но не знаю, как объявить переменные. См. Приведенную ниже ошибку.Perl Getopt :: Long :: Descriptive - как объявить переменные

Любая помощь приветствуется,

благодаря

$ Perl make_keggTable.pl -i ko2genes.pau -o пау
Глобальный символ "$ inlocus" требует явного имя пакета на make_keggTable.pl линии 126.
Глобальный символ «$ inlocus» требует явного имени пакета на make_keggTable.pl линии 126.
Глобального символ «$ orgCode» требует явного имени пакета на make_keggTable.pl линии 133.
Глобального символ «$ orgCode» требует явного пака имя е в make_keggTable.pl линии 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"; 
+1

Вы прокомментировали пару строк перед 'open'. – devnull

+1

, но мне все еще нужны те, если я объявляю их, используя get :: opt as perl make_keggTable.pl -i ko2genes.pau -o pau? – user2814482

ответ

3

Вам не нужно объявлять дополнительные скалярные переменные с Getopt::Long::Descriptive. Просто используйте следующие обозначения:

open (IN, $opt->inlocus) or die "cannot open ", $opt->inlocus, "\n"; 
Смежные вопросы