Bio-RNA-Treekin
view release on metacpan or search on metacpan
lib/IO/File/RecordStream.pm view on Meta::CPAN
# IO/File/RecordStream.pm
package IO::File::RecordStream;
our $VERSION = '0.05';
use 5.006;
use strict;
use warnings;
use Moose;
use MooseX::StrictConstructor;
use namespace::autoclean;
use autodie qw(:all);
use Scalar::Util qw(reftype openhandle);
use IO::Lines;
has 'file_name' => (
is => 'ro',
isa => 'Str',
predicate => 'has_file_name',
);
has 'file_handle' => (
is => 'ro',
isa => 'FileHandle',
builder => '_build_file_handle',
lazy => 1,
);
has 'end_reached' => (
is => 'ro',
default => 0,
init_arg => undef,
writer => '_end_reached', # private writer
);
# A regexp matching the separator line used to separate individual records
has 'match_separator' => (
is => 'ro',
isa => 'RegexpRef',
required => 1,
);
# A code ref that can be passed a ref to the array containing the read
# lines and that makes a new record object from it.
has '_record_factory' => ( # keep the ref private
is => 'ro',
isa => 'CodeRef',
init_arg => 'record_factory',
required => 1,
);
# Allow various calling styles of the constructor:
# new(file_handle): pass file handle to read data from
# new(file_name): pass file name of file to read data from
# These don't make much sense in this class because other attributes require
# initialization as well, but in a sub-class these may be overwritten and
# calling with only a file name and file handle is convenient.
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
return $class->$orig(@_) unless @_ == 1; # no special handling
# Check if we got a file name or handle for multi-record input file.
if (not reftype $_[0]) { # file name given
my $input_file_name = shift;
return $class->$orig(file_name => $input_file_name);
}
elsif (reftype $_[0] eq reftype \*STDIN) { # file handle given
( run in 0.660 second using v1.01-cache-2.11-cpan-39bf76dae61 )