perl使用用户定义目录中的文件名填充数组?

时间:2013-06-20 16:52:55

标签: arrays perl glob populate

我正在尝试使用用户定义目录中的文件名填充两个数组。到目前为止,我的代码是有效的,如果文件在我运行程序的同一目录中。此代码的最终目标是使用脚本将文件从一种格式转换为另一种格式,并将新转换的文件导出到用户定义的目录中。

# Get export directory
my $export_dir = $ARGV[0]."\\";

print "Export Directory: \"$export_dir\"\n\n" if DEBUG;

# Get current working directory
my $cwd_dir =  getcwd;

# Replace slashes with back-slashes for Windows compatibility
$cwd_dir =~ s/\//\\/g;

print "Current Working Directory: \"$cwd_dir\"\n\n" if DEBUG;


# Get list of ZIP files in directory
my @zip_files = glob "*.zip";

当zip文件位于当前工作目录中时,此代码有效。如何让zip文件位于用户定义的目录中? (在这种情况下是一个子文件夹,但应该是用户定义导出目录的地方)。

2 个答案:

答案 0 :(得分:1)

只需将目录名称预先挂起到glob规范:

my @zip_files = glob "$export_dir\\*.zip";

P.S。理想情况下,您应该使用File::Spec CPAN模块以独立于操作系统的方式构建文件路径,而不是为Windows编译"\\"和为Unix编译"/"

答案 1 :(得分:0)

你显然想要

my @zip_files = do { eval { chdir $export_dir } or die $!; my @x = glob "*.zip"; chdir $cwd_dir; @x };

或者,如果$export_dir不是一个有效的目录,那么过度杀戮会更少(返回空列表)

my @zip_files = eval { chdir $export_dir or die; my @x = glob "*.zip"; chdir $cwd_dir; @x };