http://www.perlmonks.org?node_id=1004542


in reply to Moose and File::Temp

Are your remarks relevant to the following issue as well?
package test; use Moose; use FileHandle; has 'fh' => ( is => 'rw', isa => 'FileHandle', lazy => 1, default => sub { FileHandle->new }, ); sub BUILD { my $self = shift; open $self->{fh} , "<", "temp.txt"; while (<$self->{fh}>) { print $_; } }
This also throws an error:
Syntax error at test.pm line 17, near "<$self->{fh"

Replies are listed 'Best First'.
Re^2: Moose and File::Temp
by tobyink (Canon) on Nov 19, 2012 at 14:05 UTC

    You may have some difficulty with isa => 'FileHandle' because while FileHandle is a core Perl module, Moose uses the type constraint string "FileHandle" to refer to unblessed Perl file handles - i.e. not objects created by the FileHandle package.

    open my $fh , "<", "temp.txt"; $self->fh($fh); while (<$fh>) { print $_; }
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
      So it is impossible to use  while(<$self->{IamAfileHandleAttribute}>) { ... } > to read a file, outside my constructor. I guess I will have to do:
      my $temp_fh = $self->{IamAfileHandleAttribute}; while (<$temp_fh>) { ... }
        So it is impossible to use while(<$self->{IamAfileHandleAttribute}>) { ... } > to read a file
        no, it's not really impossible. you can just use readline instead of the diamond operator.
        while (readline $self->{IamAfileHandleAttribute}) {