对于包含文件名的通配符,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
...
答案 0 :(得分:12)
Win32::Autoglob
。PERL5OPT
环境变量设置为-MWin32::Autoglob
或use Win32::Autoglob
。答案 1 :(得分:4)
操作系统的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。
答案 2 :(得分:2)
简单回答:
my @args = glob "@ARGV";
答案 3 :(得分:1)