Открытие файлов на самом деле никак не связано с Moose.Однако, если вы ищете существующие интерфейсы для работы с файлами, вам следует взглянуть на Path :: Class :: File , который является объектом, который будет содержать имя файла и предоставит вам множество методов для обращения с файлами.с файлом, который он представляет.Весьма распространено использовать этот класс в качестве ограничения типа Moose в атрибуте:
package MyApp::Foo;
use Moose;
has filename => (
is => 'ro', isa => 'Path::Class::File',
);
sub process_file
{
my $this = shift;
if (-e $this->filename)
{
my $fh = $this->filename->openr;
while (my $line = <$fh>)
{
# process file, line by line...
}
}
}
package main;
my $obj = MyApp::Foo->new(filename => '/home/me/foo.txt');
$obj->process_file;
Вы также можете изменить метод process_file
, чтобы он использовал coderef, который получает одну строку из файла в качестве аргумента, чтобы обработать содержимое файла более модульным способом.Конечно, все зависит от того, для чего нужна ваша программа.
В качестве альтернативы, если вам нравится MooseX :: Types , вы можете сделать:
use MooseX::Types::Path::Class qw(Dir File);
has file => ( ..., isa => File, coerce => 1, ... );
Это позволит вам передать имя файла атрибуту, и оно автоматически разовьется в Path::Class::File
объект внутри.