所以我最初使用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
答案 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(...))
。