看到了脚本(见下文),但找不到更多关于"-n"的信息.
my $numeric =0;
my $input = shift;
if ($input eq "-n") {
$numeric =1;
$input = shift;
}
my $output = shift;
open INPUT, $input or die $!;
open OUTPUT, ">$output" or die $!;
my @file = <INPUT>;
if ($numeric) {
@file = sort { $a <=> $b } @file;
} else {
@file = sort @file;
}
print OUTPUT @file;
Run Code Online (Sandbox Code Playgroud)
解释脚本的文本说明如下"如果我们在程序名称之后在命令行上看到的第一件事是字符串-n,那么我们正在进行数字排序." Google搜索似乎无法识别大多数"非字母数字"符号,因此"-n"搜索不会产生任何效果.我看到的唯一另一个地方"-n"是学习perl,它说下面的"转换后的sed脚本可以使用或不使用-n选项".甚至不确定这是否与"-n"脚本中的相同.任何想法,我可以找到更多关于-n它的信息(虽然它可能只是一个数字字符串??没有别的更多)
在-n这个脚本中使用是完全无关-n的已使用标志perl.换句话说,这个:
perl -n script.pl
Run Code Online (Sandbox Code Playgroud)
与此完全不同:
perl script.pl -n
Run Code Online (Sandbox Code Playgroud)
你有什么是第二种情况.看一下以下文档shift:
将数组的第一个值移开并返回,将数组缩短1并将所有内容向下移动.如果数组中没有元素,则返回未定义的值.如果省略ARRAY,转移子程序和格式的词法范围内@_阵列和子例程之外,还由内中的eval STRING建立的词法作用域的@ARGV阵列,BEGIN {},INIT {},CHECK {} ,UNITCHECK {}和END {}构造.
这是一个满口,但它所说的是,如果我们不在一个子程序中,并且shift单独出现,它将抓住第一个元素@ARGV.什么@ARGV?让我们看看perlvar,其中记录了所有这些奇怪的变量:
数组@ARGV包含用于脚本的命令行参数.
请注意,这些是脚本的参数,而不是perl的参数.因此,如果有人用你的脚本执行perl script.pl -n,那么我们可以期待$ARGV[0]成为字符串-n.
现在看看你的代码,很明显发生了什么:
my $input = shift;
if ($input eq "-n") {
$numeric =1;
$input = shift;
}
Run Code Online (Sandbox Code Playgroud)
他们在shift没有参数的情况下使用并在子程序之外抓取第一个元素@ARGV.如果是这样-n,则变量$numeric设置为1.该变量控制脚本的行为方式.(然后脚本继续获取输入和输出文件的名称@ARGV.)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |