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完成。

-wuse 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 / )