我必须包括一个命令行开关(-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";
严把好用;你也应该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 ]
程序文件(或可选的-)之前的任何内容都是命令行开关,它告诉perl解释器执行一些特殊的操作;用于perl程序的开关必须在程序文件名之后,因此:perl filename.pl -g
,而不是perl -g filename.pl
。
在您的shebang线上,您有-s
; 不要使用此开关。它是那些没有经受时间考验并且不能与现代Perl一起很好地使用的功能之一。在这种情况下,它甚至在代码开始之前就对您隐藏了-g参数;删除它,您应该会看到预期的结果。
而且,尽管没有充分的理由要使用-s
,但您也不应该手动解析参数:使用Getopt :: Long。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句