以任何方式打開文件並不真正與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