我必须包含一个命令行开关(-r)来反向排序在命令行上通过@ARGV数组输入的字符串列表.我正在努力寻找一个关于命令行开关的好地方.我在网上找不到任何明确解释这些主题的好消息来源.
问题1:有没有人知道任何明确解释这个主题的好的在线资源?
我在网上找到了这个例子,但我无法让它工作.它将在命令行运行,并输出'hello,world',但如果我键入$perl -g filename.pl它将输出:无法识别的开关:-g(-h将显示有效选项).
问题2 为什么这不起作用?不应该用-g说'再见世界'吗?
#! /usr/local/bin/perl -s
use strict;
my( $switch, $thing );
$switch = shift;
if( $switch and $switch eq "-g" ) {
$thing = shift || 'world';
} else {
$thing = $switch || shift || 'world';
$switch = undef if $switch;
}
print $switch ? 'Goodbye' : 'Hello', ", $thing\n";
Run Code Online (Sandbox Code Playgroud)
干得好用; 你也应该use warnings;.
Perl的语法是:
perl [ -sTtuUWX ] [ -hv ] [ -V[:configvar] ]
[ -cw ] [ -d[t][:debugger] ] [ -D[number/list] ]
[ -pna ] [ -Fpattern ] [ -l[octal] ] [ -0[octal/hexadecimal] ]
[ -Idir ] [ -m[-]module ] [ -M[-]'module...' ] [ -f ]
[ -C [number/list] ] [ -S ] [ -x[dir] ]
[ -i[extension] ]
[ [-e|-E] 'command' ] [ -- ] [ programfile ] [ argument ]
Run Code Online (Sandbox Code Playgroud)
程序文件(或可选 - )之前的任何内容都是一个命令行开关,它告诉perl解释器做一些特别的事情; 用于perl程序的开关需要在程序文件名之后,因此:perl filename.pl -g不是perl -g filename.pl.
在你的shebang线上,你有-s; 不要使用此开关.它是其中一个没有经得起时间考验的功能,并且与现代的perl不兼容.在这种情况下,它会在您的代码开始之前隐藏-g参数; 删除它,你应该看到你期望的结果.
虽然没有任何合理的理由可以使用-s,但您也不应手工解析参数:使用Getopt :: Long.