1 回答

TA貢獻1877條經驗 獲得超6個贊
GetOptions(\%gh_prog_opt, qw(help|h relxml|r=s spxml|s=s corexml|c=s));
可以讀入指定的命令行參數設置到gh_prog_opt散列中;-h等價于-help,相當于別名,類似的-r是-relxml的別名,-s是-spxml的別名,-c是-corexml的別名;=s表示要用等號再跟一個字符串值
類似的還有i表示需要整數值,f表示需要浮點數值,=(=s或=i等)表示該參數必須跟值,還有:(:s或:i等)表示該參數可以跟值,如果命令行沒有跟值,則設置為空字符串或數字0。
更詳細的用法可以在命令行中執行 perldoc Getopt::Long 查看(如果您英語好),或是上網查找GetOptions的用法。
另外,我感覺您程序中“GetOptions(\%$gh_prog_opt”可能多了個美元號。
以下是測試程序代碼,希望能幫助您理解GetOptions的用法:
use Getopt::Long;
use Data::Dumper;
$gh_prog_opt{"spxml"} = "imirel_sp.xml";
$gh_prog_opt{"relxml"} = "imirel.xml";
$gh_prog_opt{"corexml"} = "imirel_core.xml";
my $g_optcheck_success = GetOptions(\%gh_prog_opt, qw(help|h relxml|r=s spxml|s=s corexml|c=s));
print Dumper(\%gh_prog_opt);
保存以上代碼到文件 test.pl
若命令行執行 perl test.pl
輸出結果:
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即表示初始默認值 $gh_prog_opt{"spxml"} = "imirel_sp.xml" 等
若命令行執行 perl test.pl -h
輸出結果:
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml',
'help' => 1
};
即增加了 $gh_prog_opt{"help"} = 1
若命令行執行 perl test.pl -h=2
輸出結果:
Option h does not take an argument
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即-help參數不能再跟值,是個bool型參數
若命令行執行 perl test.pl -c
輸出結果:
Option c requires an argument
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即-c(就是-corexml)參數需要跟一個字符串值
若命令行執行 perl test.pl -c=c_file
輸出結果:
$VAR1 = {
'corexml' => 'c_file',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即設置了 $gh_prog_opt{"corexml"} = "c_file"
若命令行執行 perl test.pl -cor
輸出結果:
Option corexml requires an argument
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即-corexml可以簡寫為-cor
若命令行執行 perl test.pl -cor=cor_file
輸出結果:
$VAR1 = {
'corexml' => 'cor_file',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
若命令行執行 perl test.pl -corexml=cor_file
輸出結果:
$VAR1 = {
'corexml' => 'cor_file',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
若命令行執行 perl test.pl -corexml2=cor_file
輸出結果:
Unknown option: corexml2
$VAR1 = {
'corexml' => 'imirel_core.xml',
'relxml' => 'imirel.xml',
'spxml' => 'imirel_sp.xml'
};
即不能識別-corexml2參數
若命令行執行 perl test.pl -c=1 -r=2 -s=3
輸出結果:
$VAR1 = {
'corexml' => '1',
'relxml' => '2',
'spxml' => '3'
};
即設置了 $gh_prog_opt{"corexml"} = "1" 等
添加回答
舉報