我正在尋找一種簡單的方法來檢查正確數量的命令行參數,如果發生錯誤並顯示用法消息,然後立即退出。簡單的方法來檢查Perl中的有效命令行參數?
我想到了什麼樣
if (@ARGV < 3) {
print STDERR "Usage: $0 PATTERN [FILE...]\n";
exit 1;
}
這是一個有效的模式? Sry,我是一個完全的Perl noob :-)。
我正在尋找一種簡單的方法來檢查正確數量的命令行參數,如果發生錯誤並顯示用法消息,然後立即退出。簡單的方法來檢查Perl中的有效命令行參數?
我想到了什麼樣
if (@ARGV < 3) {
print STDERR "Usage: $0 PATTERN [FILE...]\n";
exit 1;
}
這是一個有效的模式? Sry,我是一個完全的Perl noob :-)。
另外,我會強烈建議使用Perl中處理命令行參數,Getopt::Long
模塊的慣用方式(並開始使用命名的參數,而不是基於位置的)。
如果你有3個參數,你並不真正關心。如果您有參數a,b和C,您通常會關心。至於命令行界面設計,3個參數是關於位置參數(cmd <arg1> <arg2>
)與任意順序(cmd -arg1 <arg1> -arg2 <arg2>
)中的命名參數之間的截止位置。
所以你最好不要做:
use Getopt::Long;
my %args;
GetOptions(\%args,
"arg1=s",
"arg2=s",
"arg3=s",
) or die "Invalid arguments!";
die "Missing -arg1!" unless $args{arg1};
die "Missing -arg2!" unless $args{arg2};
die "Missing -arg3!" unless $args{arg3};
是的,沒關係。 @ARGV
包含命令行參數並在標量上下文中評估它們的編號。
(雖然它看起來像你的意思是從你的錯誤信息@ARGV < 2
或< 1
)
另一種常見的方式做到這一點是使用die
die "Usage: $0 PATTERN [FILE...]\n" if @ARGV < 3;
你可以在@ARGV
特別多的幫助變量在你的命令行:
perldoc -v @ARGV
使用$#ARGV獲得傳遞的參數的總數Perl腳本,像這樣:
if (@#ARGV < 4)
我以前使用過和工作如http://www.cyberciti.biz/faq/howto-pass-perl-command-line-arguments/所示。
參見在http://perldoc.perl.org/perlvar.html原始文檔,它指出:
@ARGV
陣列@ARGV包含專門用於該腳本的命令行參數。 $#ARGV通常是參數個數減1,因爲$ ARGV [0]是第一個參數,而不是程序的命令名稱本身。請參閱$ 0作爲命令名稱。
我的`perldoc`不能這樣工作。 – aschepler 2011-02-16 22:07:24
您使用的是哪個版本的Perl?或者你可能需要爲你的shell轉義`@`。參見`perldoc -h`。 – toolic 2011-02-16 22:08:51