【问题标题】:Can Perl one-liners be used in Perl script?Perl 单行语句可以在 Perl 脚本中使用吗?
【发布时间】:2012-08-10 06:21:30
【问题描述】:

我是 Perl 新手,我正在使用 Perl 单行代码以及一些简单的 Perl 脚本来完成我的任务。

我想知道是否有可能以代码格式组合一堆单行代码并只运行包含单行代码的特定文件?例如,如果我有 3 个单行程序要逐个运行,我可以将这 3 个单行程序放在一个名为 file.pl 的文件中并运行吗?

oneliner....
oneliner....

code

oneliner....

我感兴趣的所需格式如上所示。

【问题讨论】:

    标签: perl


    【解决方案1】:

    听起来你想要一个只有一个衬垫的 shell 脚本:

     #!/bin/sh
    
     perl -le '...'
     perl -ane '...'
     perl -e '...'
    

    如果您想在 Perl 程序的中间运行单行程序,您可以使用 system

    #!/usr/bin/perl
    
    system( q( perl -le '...' ) );
    

    但是,如果您已经在 Perl 程序中,您可以将单行代码扩展为非速记代码并将其放入程序中。例如,参见How can I consolidate several Perl one-liners into a single script?

    【讨论】:

    • 我不确定我是否应该在此评论中问这个问题。但是我非常需要我之前关于“比较文件并将类似数据存储到不同文件中”的问题的解决方案,即使它已经得到了回答,我不确定为什么这些解决方案对我不起作用。我可以期待你对这个问题的帮助吗?提前非常感谢。
    • @unkaitha Hmmmm... 问题要求一个名为“file.pl”的脚本,即 perl 脚本,而不是 shell 脚本。问题应该表明您愿意接受任何类型的脚本。
    • @David:如果你不知道什么是可能的,你就无法得到一个完美的问题。作为回答者,你的工作就是解决这个问题。您应该考虑意图而不是字面问题。
    • @brain d foy:您建议在代码中使用系统((.... 用于 perl oneliners 的代码真的很棒,但我可以在该 oneliner 中提供 ARGV 并在命令行中提供变量吗?运行代码????如果可以的话,你能建议我怎么做吗????我已经发布了同样的问题。
    【解决方案2】:

    基本上,是的。你接受实际的命令并将它们放在一个文件中。因此,使用上一个答案中的示例,创建一个包含以下内容的文件:

    print reverse <>
    

    然后使用 perl 运行它。在类 Unix 机器上

    perl file.pl
    

    在 Windows 上我猜它会是相似的。在 google 中搜索“在 windows 下运行 perl 脚本”或类似内容。

    【讨论】:

    • 但我猜你建议的不是oneliner...@terdon
    • @unkaitha 根据定义,包含多个 oneliner 的文件不是 oneliner。如果您想运行多个单行,您只需提取“单引号”之间的代码并将其粘贴到文件中。
    【解决方案3】:

    一般来说,这是行不通的,也没有多大意义。通常,perl oneliner 使用一些命令和参数调用 perl。例如,这是一个典型的oneliner

    perl -e 'print reverse <>' foo.txt
    

    但是,如果将其放入脚本中,则会得到以下结果:

    Bareword found where operator expected at .\one.pl line 1, near "'print reverse <>' foo"
            (Missing operator before foo?)
    syntax error at .\one.pl line 1, near "perl -e "
    Execution of .\one.pl aborted due to compilation errors.
    

    所以,script 的格式和 oneliner 的格式是不兼容的。但是,通常可以通过从 oneliner 中提取命令和参数来将 oneliners 转换为脚本格式。

    【讨论】:

    • 你刚才发现oneliners可以转换成perl脚本,然后可以加在一起。但想知道它是否可以按照问题中的描述来完成。谢谢你的回答@大卫
    猜你喜欢
    • 2014-03-05
    • 2012-02-18
    • 2020-03-23
    • 1970-01-01
    • 2010-09-18
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多