Почему это возвращает Path :: Class :: Dir вместо файла? - PullRequest
1 голос
/ 01 сентября 2011

Поэтому я использовал 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 ]

5 голосов
/ 01 сентября 2011

Это ошибка в File :: ShareDir :: PathClass .

Патч:

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

Подано тикет

2 голосов
/ 01 сентября 2011

Потому что File :: ShareDir :: PathClass недостаточно умен. Все, что он делает - это оборачивает соответствующий метод File :: ShareDir в dir(). Это не очень хорошо работает, когда результатом является файл, а не каталог.

Я бы бросил File :: ShareDir :: PathClass и просто использовал бы file(dist_file(...)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...