为什么这会返回Path :: Class :: Dir而不是文件?

时间:2011-09-01 01:09:40

标签: perl

所以我最初使用File作为类型验证但是因为类型验证失败了,所以我将其切换为Dir。但是最终路径是一个文件,所以我不确定我做错了什么。

use strict;
use warnings;
use namespace::autoclean;

# VERSION

use Moose::Role;

use MooseX::Types::Moose qw( Str );
use MooseX::Types::Path::Class qw( File Dir );
use File::ShareDir::PathClass;

has cybs_wsdl => (
    required  => 0,
    lazy      => 1,
    is        => 'ro',
    isa       => Dir,
    builder   => '_build_cybs_wsdl',
);

sub _build_cybs_wsdl {
        my $self = shift;


        my $wsdl = 'CyberSourceTransaction_1.62.wsdl';

        my $file
            = File::ShareDir::PathClass->dist_file(
                'Business-CyberSource',
                 $wsdl
            );

        return $file;
}

注意:最终路径为:/home/ccushing/Business-CyberSource/.build/rzuQn5s899/blib/lib/auto/share/dist/Business-CyberSource/CyberSourceTransaction_1.62.wsdl

2 个答案:

答案 0 :(得分:5)

这是File::ShareDir::PathClass中的错误。

修补程序:

-        return dir( $result );
+        return $sub =~ /_file\z/ ? file( $result ) : dir( $result );

提交ticket

答案 1 :(得分:2)

因为File::ShareDir::PathClass不够聪明。它只是将相应的File::ShareDir方法包装在dir()中。当结果是文件而不是目录时,这不能很好地工作。

我将删除File :: ShareDir :: PathClass并使用file(dist_file(...))