in reply to Re: Moose reading file line by line
in thread Moose reading big file line by line

I also was trying to do it this way:

has 'handler' => ( isa => 'FileHandle', is => 'rw' ); sub openHandler { my $self = shift; open( $self->handler, '<', $self->file ) or croak "Can't open file +"; } sub closeHandler { my $self = shift; close $self->handler; } sub readLine { my $self = shift; return <$self->handler>; }

but im getting Bareword syntax error

Replies are listed 'Best First'.
Re^3: Moose reading file line by line
by Corion (Patriarch) on Apr 27, 2015 at 13:08 UTC

    It would be easier if you told me where Perl reports a syntax error.

    The following is not really valid Perl:

    return <$self->handler>;

    See readline resp. I/O-Operators about how to use a more complex expression as a filehandle. You could also just simplify your code to the following construct:

    sub readLine { my $self = shift; my $fh= $self->handler; return <$fh>; }

    I'm not sure whether your open $self->handler actually doess the right thing, but then, I don't know how Moose proposes you store filehandles and what the 'FileHandle' type is supposed to do. I presume that $self->handler does not return a reference to the actual filehandle, so your open might just be useless because you never store the actual opened filehandle back into the object.

      You are right in everything you have written. So to make it work should I make a reference to $fh and that reference to be $self->handler?

        I would simply use whatever Moose allows as getters and setters and use the setter to store the filehandle:

        sub openHandler { open my $fh, '<', $filename or die "$filename: $!"; $self->set_filehandle($fh); };