-e
与其在 xxxx.pl 文件中提供脚本,不如在命令行中提供它
-p
使它像 sed 一样迭代文件名参数,但还在脚本末尾打印 $_ 的内容。
以上两个组合在-pe中
-i
表示您要就地编辑文件并将输出写入同一文件。在实践中,Perl 重命名输入文件并从这个重命名的版本中读取,同时写入具有原始名称的新文件
-0
重新定义记录结束字符(默认为\n),以便您可以将整个输入文件作为单行读取
1*
是脚本的命令行参数,所以我猜您正在修改任何名称以 1 开头的文件(您可以使用 *.c,或者根据您尝试修改的文件类型使用其他任何文件)
打印 $h
打印作为脚本“主要”的变量 $h。如果它是用头文件的内容初始化的(这一行的意图),那么它将打印头文件
BEGIN{ 这里有一些代码 }
这是您在脚本启动之前执行的内容。这就是我难过的地方。这似乎不是有效的 perl 代码
基本上就是这样:
- 这应该会在 BEGIN 块中 slurp 整个头文件(因为 -0)并将其存储在变量 $h 中
- 遍历命令行末尾通配符指定的所有文件
- 对于每个文件:打印标题(打印 $h)然后打印 hte 文件本身(因为 -pe)
所以相当于把脚本拼出来:
$h = gets content of the entire header file
while (<>){ #loop implied by -pe, iterates over all the 1* files
# the main contents of the "-e" script are inserted below as part of executing -pe
print h$; #print the header we saved
print $_; # implied by -pe, and since we are using -0, this prints the entire content in one shot
# end of the "-e" script. again it was a single print $h statement, the second print is implied by -pe
}
有点难解释,详细请看perlrun文档(运行man perlrun)。
这不是 100% 完整的解释,因为我不认为 BEGIN 块是正确的。我在我的 ubuntu 机器上尝试过,它也抱怨它的语法