perl - 如何将 Perl 的单行代码转换为完整的脚本?

标签 perl command-line

我在网上找到了很多 Perl 的俏皮话。有时我想将这些单行代码转换成脚本,否则我会忘记单行代码的语法。

例如,我使用以下命令(来自 nagios.com ):

tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'

我想用这样的东西替换它:

tail -f /var/log/nagios/nagios.log | ~/bin/nagiostime.pl

但是,我无法找出快速将这些东西放入脚本中的最佳方法。有谁能快速将这些俏皮话放入 Bash 或 Perl 脚本中吗?

最佳答案

您可以通过将任何 Perl 单行代码传递给生成 Perl 源代码的 B::Deparse 编译器后端,将其转换为完整脚本:

perl -MO=Deparse -pe 's/(\d+)/localtime($1)/e'

输出:

LINE: while (defined($_ = <ARGV>)) {
    s/(\d+)/localtime($1);/e;
}
continue {
    print $_;
}

与手动解码命令行标志相比,这种方法的优点在于,这正是 Perl 解释脚本的方式,因此无需猜测。 B::Deparse 是核心模块,因此无需安装任何内容。

关于perl - 如何将 Perl 的单行代码转换为完整的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822525/

相关文章:

perl - 如何在 Perl 中创建嵌套哈希作为常量?

linux - egrep 剩余的 alpha 行

MySQL Linux 命令行工具和格式正确的结果

Java命令行,无响应

perl - 有关 Perl Expect 的帮助

perl - Perl 中的美元符号加号?

c++ - 无法使用 SWIG 将 QString 从 C++ 函数返回到 PERL 函数

windows - Perl:为什么我会收到错误 "The file name, directory name, or volume label syntax is incorrect."

java - 使用 java -classpath 命令执行主类时出现 NoClassDefFoundError

MySQL - 如何更改所有数据库中的列数据类型?