2011-09-01 79 views
1

所以我最初使用的是File类型,但是由于类型验证失败,所以我将它切换到Dir。但最终的路径是一个文件,所以我不确定我做错了什么。为什么这会返回一个Path :: Class :: 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

因为File::ShareDir::PathClass是不够聪明。它所做的只是在dir()中包装相应的File::ShareDir方法。如果结果是文件而不是目录,那么效果不佳。

我会丢弃File :: ShareDir :: PathClass,并使用file(dist_file(...))

相关问题