Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl标志-pe,-pi,-p,-w,-d,-i,-t?_Perl_Command Line_Flags - Fatal编程技术网

Perl标志-pe,-pi,-p,-w,-d,-i,-t?

Perl标志-pe,-pi,-p,-w,-d,-i,-t?,perl,command-line,flags,Perl,Command Line,Flags,我看到了许多使用不同标志运行Perl代码或脚本的方法。然而,当我尝试在谷歌上搜索每个标志的含义时,我主要是在通用的Perl站点上获得结果,而没有找到关于标志或其使用的具体信息 下面是我最常遇到的旗帜,我不知道它们是什么意思: perl-pe perl-pi perl-p perl-w perl-d perl-i perl-t 如果您能告诉我它们各自的含义以及它们的一些用例,或者至少告诉我一种了解它们含义的方法,我将非常感激。是的,谷歌在查找标点符号方面是出了名的困难,不幸的是,Perl似乎主

我看到了许多使用不同标志运行Perl代码或脚本的方法。然而,当我尝试在谷歌上搜索每个标志的含义时,我主要是在通用的Perl站点上获得结果,而没有找到关于标志或其使用的具体信息

下面是我最常遇到的旗帜,我不知道它们是什么意思:

  • perl-pe
  • perl-pi
  • perl-p
  • perl-w
  • perl-d
  • perl-i
  • perl-t

如果您能告诉我它们各自的含义以及它们的一些用例,或者至少告诉我一种了解它们含义的方法,我将非常感激。

是的,谷歌在查找标点符号方面是出了名的困难,不幸的是,Perl似乎主要由标点符号组成:-)

有关命令行开关的详细信息,请参见。(可从命令行调用
perldoc perlrun

逐一简要介绍选项:

-p: Places a printing loop around your command so that it acts on each line of standard input. Used mostly so Perl can beat the pants off awk in terms of power AND simplicity :-) -n: Places a non-printing loop around your command. -e: Allows you to provide the program as an argument rather than in a file. You don't want to have to create a script file for every little Perl one-liner. -i: Modifies your input file in-place (making a backup of the original). Handy to modify files without the {copy, delete-original, rename} process. -w: Activates some warnings. Any good Perl coder will use this. -d: Runs under the Perl debugger. For debugging your Perl code, obviously. -t: Treats certain "tainted" (dubious) code as warnings (proper taint mode will error on this dubious code). Used to beef up Perl security, especially when running code for other users, such as setuid scripts or web stuff. -p:在命令周围放置一个打印循环,以便它对每个命令都起作用 标准输入行。主要用于使Perl能够击败 从功能和简单性的角度来看,穿上awk裤子:-) -n:在命令周围放置一个非打印循环。 -e:允许您将程序作为参数提供,而不是 而不是在文件中。您不希望必须创建脚本 每一个小Perl一行的文件。 -i:就地修改输入文件(备份 原件)。方便修改文件,无需{copy, 删除原始,重命名}进程。 -w:激活一些警告。任何优秀的Perl程序员都会使用这个。 -d:在Perl调试器下运行。为了调试Perl代码, 明显地 -t:将某些“受污染”(可疑)的代码视为警告(适当的) 污染模式将在此可疑代码上出错)。习惯吃牛肉 增强Perl安全性,尤其是在为其他应用程序运行代码时 用户,例如setuid脚本或web内容。
-p
标志基本上使用

while (<>) {
# exec here
}
continue {
    print or die "-p destination: $!\n";
}
-i
指示解释器执行脚本传递给STDIN的所有数据都要就地完成

-w
使用警告相同,但在全局范围而不是本地范围内


-d
运行Perl调试器

其他人提到perlrun。如果您使用B::Deparse,您可以看到它的含义(对于大多数情况):

$perl-MO=Deparse-p-e1
行:while(已定义($\u=)){
'???';
}
继续{
模具“-p目的地:$!\n”,除非打印$;
}
-e语法正常
1由“?”表示,因为它已被优化

$ perl -MO=Deparse   -p -i  -e 1
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK
$perl-MO=Deparse-p-i-e1
开始{$^I=”“;}
行:while(已定义($\u=)){
'???';
}
继续{
模具“-p目的地:$!\n”,除非打印$;
}
-e语法正常
-我设置了$^i,就像

$ perl -MO=Deparse   -p -i.bak  -e 1
BEGIN { $^I = ".bak"; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK
$perl-MO=Deparse-p-i.bak-e1
开始{$^I=“.bak”}
行:while(已定义($\u=)){
'???';
}
继续{
模具“-p目的地:$!\n”,除非打印$;
}
-e语法正常

但是请记住,使用2参数open,因此文件名不能以
开头。还有一个重要的标志
-n
,在列表中没有提到

-n
的工作原理与
-p
相同,只是默认情况下它不打印
$。这在过滤文本文件时非常有用

通过这种方式,Perl可以用一行代码替换grep | sed

例如:


perl-ne'print“$1\n”if/Messages read:(\d+/”我没有注意到您提到了
perldoc perlrun
。我已删除我的答案。:-)<实际上,代码>-w
通常是要避免的,因为它为所有代码启用警告,包括编写时没有考虑警告的CPAN模块。结果通常非常嘈杂,也非常无用。
-w
通常是避免的,但在您自己的代码中应该用
使用警告
替换。@Daskwuff:一般来说,我同意,并且我确实在自己的代码中使用警告,但是-w确实有用-它有助于清除编写糟糕的CPAN模块。:-)@可能/必须采用附加参数的IanBytchek参数不能位于压缩列表中<代码>-i
接受备份的扩展名
-e
接受一个perl命令。在
-0ep
中,您告诉perl“p”是perl命令而不是参数。谷歌搜索关于perl的基本答案通常会让你找到一些毫无帮助的网站。始终首先检查perl自己的文档。在perl.com.Seconded上。在这种情况下,
perldoc perlrun
有一个Perl接受的所有命令行选项的列表。Google问题:减号被Google解释为“排除此术语”。为了避免这种行为,将包含减号的术语放在引号中。
-w
使用警告
不完全相同,后者的作用域是本地文件plusplus,true,补丁应答。将脚本作为参数传递与在STDIN上传递不同-我从参数列表中获取文件名,而不是stdin。虽然STDIN通常与控制终端相关联,并且是从读取STDIN并将参数列表设置为perl的shell继承的,但它们不是一回事。这可以进一步简化。不需要打印“$1\n”。你可以用“print”来代替。不可以,
print$1
print
print$
)不同。它可以:
echo abc | perl-nw-e“print if(1)”
将打印
abc
。不需要
$1
引用。@EnglumeDelysum:是,但不想打印整行,只打印正则表达式匹配的数字。
$ perl -MO=Deparse   -p -i  -e 1
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK
$ perl -MO=Deparse   -p -i.bak  -e 1
BEGIN { $^I = ".bak"; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK