2011-09-01 37 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(...))

相關問題