perl 中定义的这个到底该怎么理解 我很模糊if ( $#ARGV < 0 ) { exit(1); }
作者&投稿:轩发 (若有异议请与网页底部的电邮联系)
遇到perl的问题首先查perldoc,在perlvar里查到关于@ARGV的一条:The array @ARGV contains the command-line arguments intended for the script.$#ARGVis generally the number of arguments minus one, because$ARGV[0]is the first argument, not the program's command name itself. See$0for the command name.可以看出,$#ARGV为命令行参数(不包括命令本身)的个数减一,即数组@ARGV最后一个元素的索引。用处也就是在程序开始时判断命令行参数个数,或者直接操作最后一个命令行参数。本质上,$#加数组名表示数组最后一个元素的索引,其实,这种糟糕的语法来源于C Shell,在实际的代码中不常见。判断命令行参数个数,可以把@ARGV用在标量上下文中,直接操作最后一个数组元素,可以利用负数索引值。(参见《perl语言入门》3.2 特殊的数组索引)
if ($ARGV[0] =~ /^(p | platform)=(\w+)/i) #--如果第一个参数的开头格式为“p=”或“platform=”(忽略大小写)
{
$plat = $2; #---------则将该参数=号之后的值赋给plat这个变量
}
1. 以p 或是platform开头
2. 就是匹配=号
if ( $#ARGV < 0 ) #因为下标应该比元素个数少1个,如果<0,则表示数组中的参数为0个
#也就是说,数组至少应该有一个参数
$CONTROL_FILE = $ARGV[0] #取得的值则为数组的第一个参数
首先, 这句的意思即是 "如果没有参数, 就离开这个程序"
假如你在 shell 开始执行一个 perl script(脚本), 你的写法可能是
perl myscript.pl
也有可能是
perl myscript.pl "you" "me"
这时, "you" , "me" 就是传入这个 perl script 的 argument ( 参数 )
那麼你在 script 里怎样得到这些参数呢 ?
Perl 有一个预设的变数 @ARGV 这个阵列就会装载著 "you", "me"
亦即是 @ARGV = ( "you", "me" ) ;
@array = ( 1,2,3 ) ;
print $#array; # 得出 2, $# 会给出这个 array 的最後一个 index
如果是一个空阵列, 那最後一个 index 就是 -1
当 $#ARGV < 0 的时候, 那就意味著这个一个空阵列,
亦即是, 没有入输入参数的意思了
my $CONTROL_FILE = $ARGV[0] 这个变量获取了个什么呢?
如上所举例: perl myscript.pl "you" "me"
这时, $ARGV[0] 就是 "you" 了.
$ARGV[1] 就是 "me" 喇!
数组ARGV负责保存perl的命令行参数。该数组从下标0开始。$#ARGV表示数组的最后一个元素(不是元素个数)$ARGV[0]表示第一个元素的编号(下标)。例如:
if
(
$#ARGV
<
0
)
#因为下标应该比元素个数少1个,如果<0,则表示数组中的参数为0个
#也就是说,数组至少应该有一个参数
$CONTROL_FILE
=
$ARGV[0]
#取得的值则为数组的第一个参数
$ARGV[0]是perl运行该脚本后的第一个参数。例如:
你在终端中输入:
perl myprogram.pl 45 32 hello 回车
则:perl将 45,32,“hello”分别存入@ARGV数组中,$ARGV[0]即为45;$ARGV[1]为32,,,
也可以这样写:
my $flag1 = shift; // 将 45 存入$flag1;
my $flag2 = shift; // 将 32 存入$flag2;
my $flag3 = shift; // 将 "hello" 存入$flag3;
这个是做传入参数判断,如果没有参数就退出。
my $CONTROL_FILE = $ARGV[0]就是在运行perl脚本的后面跟的第一个参数。
爰娅烟酸: 数组ARGV负责保存perl的命令行参数.该数组从下标0开始.$#ARGV表示数组的最后一个元素(不是元素个数)$ARGV[0]表示第一个元素的编号(下标).例如: if ( $#ARGV < 0 ) #因为下标应该比元素个数少1个,如果<0,则表示数组中的参数为0个#也就是说,数组至少应该有一个参数 $CONTROL_FILE = $ARGV[0] #取得的值则为数组的第一个参数
双桥区18536976841: perl正则表达式中的模式分组疑问 - ?
爰娅烟酸: 这是perl里模式分组的概念,如果不是很懂,可以找下小骆驼版的看下,里面说的很清楚.对于perl:在正则表达式中,小括号()的作用是对字符串分组,其出现的地方一般会触发正则表达式引擎捕获匹配到的字符串,然后捕获组会的把匹配小...
双桥区18536976841: perl语言中$$是什么意思 - ?
爰娅烟酸: $$ Perl解释器的进程ID.补充:$组合还有很多标记:$! 根据上下文内容返回错误号或者错误串.$” 列表分隔符.$# 打印数字时默认的数字输出格式.$% 当前输出通道的当前页号.$& 与上个格式匹配的字符串.$( 当前进程的组ID$) 当前进程的有效组ID.$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.$, 当前输出字段分隔符.$. 上次阅读的文件的当前输入行号.$/ 当前输入记录分隔符,默认情况是新行.$: 字符设置,此后的字符串将被分开,以填充连续的字段.
双桥区18536976841: 我是perl新手,请问perl 中的~是什么意思,有没有关于所有perl的符号解释的全集 - ?
爰娅烟酸: sherrylucifer: 你好,很高兴回答你的问题.以下是“~”的相关信息供你参考. &(按位与)、 |(按位或)、 ~(按位非)、 ^(按位异或)、 <<(左移)、>>(右移) 其中 "=~"和"!~" 也带有"~"这个是用于正则表达试,分别是“匹配”和“不匹配”.
双桥区18536976841: perl中,请问这个是什么意思:if ($ARGV[0] =~ /^(p | platform)=(\w+)/i) $plat = $2;初次学习perl语言 - ?
爰娅烟酸: 如果第一个参数 在忽略大小写的情况下 以p或platform开头, 就把=号后面的值放到$plat里,(1)对的 (2)一定有等号
双桥区18536976841: perl中的 " - > " 这个符号,主要用作什么?
爰娅烟酸: -> 有两种用法,都和解引用有关.第一种用法,就是解引用.根据 -> 后面跟的符号的不同,解不同类型的引用,->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用.例子:$arr_ref = \@array;$arr_ref->[0] 访问数组 @array 的...
双桥区18536976841: perl 写的下面一段程序,麻烦解释一下~(以前学过C,C++等,所以没有慢慢看perl语法,求解释,谢谢) - ?
爰娅烟酸: 首先, 这个 sub 是用来去掉每行头和尾的空白字符, 然后, 根据你希望回传的方式, 给你回传数列 (array) 或单一字串 如: my @this = ( " Hello World!! ", "\they there\t", " Are you alright? " ) ; my @str = trim ( @this ) ; # 因为左边是 ...
双桥区18536976841: perl 中$::的含义及用法 - ?
爰娅烟酸: While the :: symbol can be thought of as similar to the period in a C struct, it is much more akin to the :: class scope operator in C++: a.b.c; /* something in C */ a::b::c(); // function in C++ $a::b::c; # a scalar in Perl 5 @a::b::c; # a list in Perl 5 %a::b::c; ...
双桥区18536976841: perl中$+什么意思? - ?
爰娅烟酸: 表示圆括号中的子表达式匹配的部分.大多数情况,只需要使用$1, $ 2 , 等 ,而不需要用$+.当正则表达式中有一系列括号时,$+是有用的. 例如: $_ = "Alpha Be taDelt aGamma "; /Alpha (.*)Del t a(.*)/; print "The last ma tch was $ +\n";
双桥区18536976841: 如何理解perl中的 直接量?我刚接触这门脚本. - ?
爰娅烟酸: perl 可以直接使用 "直接量" , 且不用事先宣告.$x = 100;$x = 100.234;$x = "hello world!"; 甚至 $x = "100" * 10 ; # 可以得出 1000 perl 会从你赋值的形态来判断你的值是甚麽形态, 也因为 perl 会动态配置记忆体 ( 也有 圾垃回收 ), 所以你不用理会是 int, 还是 float, 还是 char...同样, 阵列(arrary), hash, 之类的, 也不用宣告形态, 也不用事先配置需要有几个间格 str = char[5] 之类的写法在 perl 都不用不上. 直接写你想写的就可以了.