6

File::Find::Rule在草莓 Perl Windows 上使用。

当我运行以下代码时:

@files = File::Find::Rule->file()
                              ->in( $dir );
                              foreach my $file (@files){
                              say $file;
                              }

我得到这种格式的文件列表:

C:\data\mydata\file/1.xls 

而不是这种格式:

C:\data\mydata\file\1.xls

可能是什么问题呢?

4

2 回答 2

6

唯一的问题是你的期望。C:\data\mydata\file/1.xls是一个完全有效的 Windows 路径。

File::Spec 可以为您规范化路径。

use File::Spec::Functions qw( canonpath );
$path = canonpath($path);

或者

use File::Spec::Functions qw( canonpath );
@files = map { canonpath($_) } @files;
于 2014-01-03T13:49:31.557 回答
1

原因可能是目录和文件名的手动连接。您可以使用 File::Spec 修复它:

use File::Spec;

my @files = File::Find::Rule->file()->in( $dir );
foreach my $file (@files){
    say File::Spec->catfile($file);
}
于 2014-01-03T13:49:53.093 回答