Perl标志-pe,-pi,-p,-w,-d,-i,-t?
我看过很多运行Perl代码或脚本的方法,它们有不同的标志。 但是,当我尝试谷歌每个国旗意味着什么,我主要得到的结果通用的Perl网站,没有关于标志或他们的使用的具体信息在那里被发现。
下面是我经常遇到的旗帜,我不知道他们的意思:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
如果你告诉我这些意味着什么,并且给他们一些用例,或者至less告诉我一个找出他们意思的方法,我将不胜感激。
是的,谷歌很难查找标点符号,不幸的是,Perl似乎主要由标点组成:-)
命令行开关全部在perlrun中详细说明 。 (通过调用perldoc perlrun
)
简单地逐一select:
-p:在你的命令周围放置一个打印循环,以便它们对每个命令都起作用 标准input行。 大多数用Perl来打败 裤子在力量和简单性方面awk :-) -n:在你的命令周围放置一个非打印循环。 -e:允许你提供程序作为参数 比在文件中。 你不想创build一个脚本 文件为每个小Perl一行。 -i:就地修改你的input文件(做一个备份 原版的)。 方便修改文件没有{复制, 删除原始,重命名}过程。 -w:激活一些警告。 任何好的Perl编码器都会使用它。 -d:在Perldebugging器下运行。 为了debugging你的Perl代码, 明显。 -t:将某些“污染的”(可疑的)代码当作警告(正确的) 污点模式将错误的这个可疑的代码)。 用于牛肉 提高Perl安全性,特别是在运行其他代码时 用户,如setuid脚本或networking的东西。
-p
标志基本上运行脚本
while (<>) { # exec here } continue { print or die "-p destination: $!\n"; }
-e
允许您将脚本传递给STDIN
perl -e '$x = "Hello world!\n"; print $x;'
-i
指示解释器执行脚本传递给STDIN
的所有数据将在STDIN
完成。
-w
与use warnings;
相同use warnings;
,而是在全球范围而不是局部范围内
-d
运行Perldebugging器
其他人提到perlrun。 如果你使用B :: Deparse,你可以看到它的含义(对于大多数情况):
$ perl -MO=Deparse -p -e 1 LINE: while (defined($_ = <ARGV>)) { '???'; } continue { die "-p destination: $!\n" unless print $_; } -e syntax OK
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.bak -e 1 BEGIN { $^I = ".bak"; } LINE: while (defined($_ = <ARGV>)) { '???'; } continue { die "-p destination: $!\n" unless print $_; } -e syntax OK
但请记住,<ARGV>使用2个参数打开,所以不要以> <
开头的文件名或以|
。
还有一个重要的标志-n
在列表中没有提到。
-n
与-p
的作用相同,只是它默认不打印$_
。 这在过滤文本文件中非常有用。
Perl可以用这种方式replacegrep | sed
grep | sed
在一个单一的class轮。
例如:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
将打印出“消息读取:”后发现的每个整数值,仅此而已。
作为一个旁注:关于perl单行本非常好的一本书: http : //www.catonmat.net/blog/perl-one-liners-no-starch-press/
一般的口味,请参阅作者的博客文章。 这一个是关于-pie等: http : //www.catonmat.net/blog/introduction-to-perl-one-liners/ (和一些乐趣见http://www.catonmat.net/blog/secret- perl-operators / )