File :: Find ::规则和文件分隔符

时间:2014-01-03 13:08:11

标签: perl file-find

我在Strawberry Perl Windows上使用File::Find::Rule

当我运行以下代码时:

@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

可能是什么问题?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

原因可能是dir和文件名的手动连接。您可以使用File :: Spec:

修复它
use File::Spec;

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