2011-09-14 17 views
2

如果Windows上的Perl腳本像在Linux上一樣工作,那麼對於包含文件名的通配符來說,這將是一件好事。使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 
... 

回答

11
  1. 安裝Win32::Autoglob如果你的Perl不會隨之而來。
  2. PERL5OPT環境變量設置爲-MWin32::Autoglobuse Win32::Autoglob
+0

+1尼斯簡單的小模塊。 – TLP

4

還有,使這個不那麼明顯了操作系統的殼之間有很大的區別:在大多數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

1

使用此一小段代碼片段來擴展通配符和獲取文件名:

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

答案很簡單:

my @args = glob "@ARGV";