The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

    BoutrosLab::TSVStreamDyn::IO::Role::Dyn

SYNOPSIS

        # in a Moose class definition...

        my $_fields = [ qw(foo bar) ];
        sub _fields { return $_fields }

        with 'BoutrosLab::TSVStream::IO::Role::Dyn';

        has 'foo' => ( ... );
        has 'bar' => ( ... );
        ...

DESCRIPTION

This role provides methods to create a file/iostream reader/writer for a class, using a stream of lines with tab separated fields for each record, converting to/from an object of the class. Usually, the stream will start with an initial line that has the field names as a tab separated record.

This is essentially the same as a TSVStream::IO::Role::Fixed, but for a TSVStream::IO::Role::Dyn the list of fixed name fields (which may be empty), is followed by a dynamically determined list of extra fields. The entire stream must consistently contain the same number of fields in each record.

This role provides attributes dyn_names and dyn_values, which are both arrays of strings. dyn_names contains the names of the extra fields that follow the ones specified in _fields. This attribute will have the same list of names for every record returned from a single reader object, and should contain the same list of names for every record passed to a single writer object. dyn_values is the list of values read or to be written for each record in a stream (and these can be different, of course).

This role also provided a BUILDARGS wrapper that alows the constructor to be given field_values=>[fld1,fld2,...] instead of providing each field explicitly by name. You can either provide all of the values (both for the _fields and the dyn_fields) in this one array, or else you can provide field_values=[fid1,fld2,...] and dyn_values=>[dyn_1,dyn_2,...] as two separate arguments.

AUTHOR

John Macdonald - Boutros Lab

ACKNOWLEDGEMENTS

Paul Boutros, Phd, PI - Boutros Lab

The Ontario Institute for Cancer Research