几乎每个 Perl 程序都如此开始:

    这是 UNIX 结构,它告诉 Shell 直接执行余下的输入程序文件。

    你可以在此行添加 Perl 的任何命令行选项,它们将成为选项之后命令行的一部分。如果你有一个程序包含:

    然后执行:

    1. perl -l program.pl

    -l-T 两个选项都会使用,但 -l 将先用。在 perlrun 文档中介绍了 Perl 的命令行选项。此处只介绍最有用的内容。

    perl -T

    Perl 允许你在 taint 模式执行。在此模式中,变量在使用前需要“消毒”,以应对不安全的操作。

    • 写入文件
    • 创建目录
    • 基本上,修改系统的任何事情

    如果你没有“去污”数据,那么这些操作将是程序中的严重错误。

    如何去污?使用正则表达式匹配有效的值,然后将匹配赋给变量。

    你应当达到程序 taint 安全的目的。

    此命令行选项允许检查给定文件的语法错误。它也会执行 BEGIN 块中的任意代码,并检查程序中已使用的模块。

    你应当使用 -c 在每次更改后检查代码的语法。

    perl -e 'code'

    该选项允许你从命令行执行代码,以代替将程序写入文件来执行。

    1. $ perl -e 'print "1\n"'
    2. 1

    Perl 的 -n 选项允许你针对标准输入的每行重复执行代码(通常使用 指定)。这些是等效的:

    1. $ cat /etc/passwd | perl -e 'while (<>) { if (/^(\w+):/) { print "$1\n"; } }'
    2. root
    3. ...
    4. $ cat /etc/passwd | perl -n -e 'if (/^(\w+):/) { print "$1\n" }'
    5. ...

    -p 选项与 -n 相同,除了它在每行后打印 $_

    如果你组合 -i 选项,Perl 将就地编辑你的文件。因此,要将一堆文件从 DOS转换成 UNIX 换行,你可以这样干:

    perl -M

    Perl 的 -M 选项使你可以从命令行使用模块。有好些模块首选此方式运行(如CPANDevel::Cover)。如果你需要使用 包含模块,它也是习惯的简写。

    1. $ perl -e 'use Data::Dumper; print Dumper( 1 );'
    2. $VAR1 = 1;
    3. $ perl -MData::Dumper -e 'print Dumper( 1 );'
    4. $VAR1 = 1;

    试试从命令行加载模块。-e1 只是一个立即退出的空程序。如果你获得错误,那么该模块未被安装:

    1. $ perl -MWWW::Mechanize::JavaScript -e 1
    2. Can't locate WWW/Mechanize/JavaScript.pm in @INC...
    3. BEGIN failed--compilation aborted.

    返回没有错误则意味着该模块已安装。

    1. $ perl -MWWW::Mechanize -e'print $WWW::Mechanize::VERSION'

    并非所有模块都有 变量,因此这可能不总是工作。