【问题标题】:Making Perl on Windows work like Linux (wildcarded param expansion)使 Windows 上的 Perl 像 Linux 一样工作(通配符参数扩展)
【发布时间】:2011-09-14 14:25:55
【问题描述】:

对于包含文件名的通配符来说,Windows 上的 Perl 脚本可以像在 Linux 上一样工作会很好。

例如:

perl myscript.pl *.txt

在 Linux 上,bash 会将 *.txt 扩展为一组文件名,并将它们作为单独的参数传递给 perl 解释器。在 Windows 上,*.txt 直接传递给 Perl。

所以,基本上,我正在寻找的是将扩展通配符参数放在脚本顶部的内容,以便脚本的其余部分可以与 Linux 上的相同。

例如:

myscript.pl

use warnings;
use strict;

# Mystery code to expand all wildcard params, fudging ARGV in the process
# ----
<Insert code here>
# ----

# Rest of script
...

【问题讨论】:

    标签: windows perl


    【解决方案1】:
    1. 如果您的 Perl 没有附带 Win32::Autoglob,请安装它。
    2. PERL5OPT 环境变量设置为-MWin32::Autoglob 或只是use Win32::Autoglob

    【讨论】:

      【解决方案2】:

      操作系统的 shell 之间存在很大差异,这使得这一点不太明显:在大多数 Unix shell 中,globbing(通配符扩展)是由 shell 完成的,而在 Windows 上则不是这样。

      这意味着由 Unix shell 启动的应用程序将在 argv 中看到一长串文件名,而在 Windows 下启动的同一应用程序将获得 1 个嵌入通配符的模式。

      通过 Cygwin 在 bash 中启动脚本可能是最干净的选择。您还可以检测 Windows (How can I tell if my Perl script is running under Windows?) 和 glob in Perl

      【讨论】:

        【解决方案3】:

        简单回答:

        my @args = glob "@ARGV";
        

        【讨论】:

          【解决方案4】:

          使用此代码片段扩展通配符并获取文件名:

          my @list = <$ARGV[0]>;
          

          【讨论】:

            猜你喜欢
            • 2013-05-23
            • 1970-01-01
            • 1970-01-01
            • 2014-03-17
            • 1970-01-01
            • 1970-01-01
            • 2022-01-10
            • 2012-02-29
            • 1970-01-01
            相关资源
            最近更新 更多