以任何方式打开文件并不真正与Moose有关。但是,如果你正在寻找现有的接口来处理文件,你应该看看Path::Class::File,它是一个包含文件名的对象,并提供了许多处理它所代表的文件的方法。这是很常见的一个属性来使用这个类作为一个木类型约束:
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
对象内部。
@ user621092使用3个参数打开,如[文档中的第一个示例](http://perldoc.perl.org/functions/open.html)所示,这与Moose有什么关系?我对解析需求的含义感到困惑。 – xenoterracide 2011-02-17 10:16:40