On 05/11/2012 05:53 PM, Karen Etheridge wrote:
On Fri, May 11, 2012 at 03:42:15PM +0200, Emmanuel Quevillon wrote:
package Myclass;

use Moose;
extends 'SuperClass';
with 'MyRole';

has 'file' =>  (is =>  'rw', isa =>  'Str', required =>  1);
has 'fh'   =>  (is =>  'rw', isa =>  'FileHandle');

after 'new' =>  sub {
    my $self = shift;
    my $file = $self->file();
    $self->set_fh($self->open_file($file)); # Returns a FileHandle obj
    return 0;
};

1;

Why not just create the filehandle when it's first needed, rather than at
construction time?  (that is: let the attribute build itself, rather than
explicitly calling a setter).

has fh =>  (
     is =>  'ro', isa =>  'FileHandle',
     lazy =>  1,
     default =>  sub {
         my $self = shift;
         $self->open_file($self->file);
     },
);

or, you can skip the extra attribute entirely by using library code:

use MooseX::Types::Path::Class qw(Dir File);
has file =>  (
     is =>  'ro', isa =>  File,
     coerce =>  1,
);

# later, in other code...
# $self->file isa Path::Class::File
my $fh = $file->openr;

# or skip using the fh directly...
my $contents = $self->file->slurp;

my $filename = $self->file->stringify;

# etc etc...


Thanks Karen, I think I'll change for MooseX::Types::Path::Class

Thanks to all
Regards 

--
-------------------------
Emmanuel Quevillon
CIB, Centre Informatique pour la Biologie
Institut Pasteur
+33 1 44 38 95 98
tuco at_ pasteur dot fr
-------------------------

Reply via email to