如何解决Perl标志-pe,-pi,-p,-w,-d,-i,-t?
| 我已经看到了许多运行带有不同标志的Perl代码或脚本的方法。但是,当我尝试用Google搜索每个标志的含义时,我主要是在通用Perl网站上获得结果,并且在那里找不到有关标志或它们的用法的特定信息。 以下是我最常遇到的标志,我不知道它们的含义: 佩尔 perl -pi perl -p perl -w Perl的 perl -i 佩尔 如果您能告诉我这些含义以及它们的用例,或者至少告诉我一种了解其含义的方法,我将不胜感激。解决方法
是的,众所周知,Google很难查找标点符号,但不幸的是,Perl似乎主要由标点符号组成:-)
命令行开关在perlrun中都有详细说明。 (可通过在命令行中调用使用2参数打开,因此没有以ѭ14开头或以ѭ15开头/结尾的文件名。
, 还有一个重要标志
perldoc perlrun
获得)
简要地一步一步地进入选项:
-p:在您的命令周围放置一个打印循环,以使其作用于每个命令
标准输入行。主要用于Perl可以击败
在功能和简单性方面降低了awk的速度:-)
-n:在命令周围放置一个非打印循环。
-e:允许您将程序作为参数提供,而不是
比在文件中。您不想创建脚本
每个Perl单线文件。
-i:就地修改您的输入文件(对
原版的)。无需{
删除原始,重命名}过程。
-w:激活一些警告。任何优秀的Perl编码器都将使用此代码。
-d:在Perl调试器下运行。为了调试您的Perl代码,
明显。
-t:将某些“污染”(可疑)代码视为警告(正确
异味模式将在此可疑代码上出错)。用来牛肉
增强Perl安全性,尤其是在运行其他代码时
用户,例如setuid脚本或网络内容。
, -p
标志基本上使用以下命令运行脚本
while (<>) {
# exec here
}
continue {
print or die \"-p destination: $!\\n\";
}
-e
允许您将脚本传递给STDIN
perl -e \'$x = \"Hello world!\\n\"; print $x;\'
-i
指示解释器:执行脚本传递给STDIN
的所有数据都应就地完成。
-w
与use warnings;
相同,但是在全局范围而不是局部范围
-d
运行Perl调试器
, 其他人提到了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
-i设置$ ^ 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
但是请记住,-n
,在列表中未提及。
-n
和-p
的作用相同,只是默认情况下不打印$_
。这在筛选文本文件时非常有用。
这样,Perl可以在一个单缸纸中代替20英镑。
例如:
perl -ne \'print \"$1\\n\" if /Messages read: (\\d+)/\' <my_input.txt
将打印出\“ Messages read:\”之后找到的每个整数值,仅此而已。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。