我见过很多运行Perl代码或脚本的方法,有不同的标志。但是,当我尝试google每个标志的含义时,我主要将结果发送到通用Perl网站,并且没有关于标志或其使用的具体信息。
以下是我经常遇到的旗帜,我不知道它们的含义:
如果你告诉我每个人的意思和一些用例,或者至少告诉我找出其含义的方法,我将非常感激。
答案 0 :(得分:134)
是的,谷歌很难找到标点符号,不幸的是,Perl 似乎主要由标点符号组成: - )
perlrun中详细说明了命令行开关。 (可通过调用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.
答案 1 :(得分:10)
-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调试器
答案 2 :(得分:8)
其他人提到了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
但请记住,&lt; ARGV&gt;使用2参数打开,因此没有以> <
开头或以|
开头/结尾的文件名。
答案 3 :(得分:4)
还有一个重要的标志-n
在列表中没有提到。
-n
与-p
的工作方式相同,但默认情况下不会打印$_
。这在过滤文本文件时非常有用。
通过这种方式,Perl可以在单个单行中替换grep | sed
。
例如:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
将打印出“Messages read:”之后找到的每个整数值,仅此而已。