Parse::Binary::FixedFormat::Variants(3pm)

Parse::Binary::FixedFormat::Variants3pm

Convert between variant records and hashes

Overview

Parse::Binary::FixedFormat supports variant record formats. To describe a variant structure, pass a hash reference containing the following elements to new. The object returned to handle variant records will be a Parse::Binary::FixedFormat::Variants.

Chooser

When converting a buffer to a hash, this subroutine is invoked after applying the first format to the buffer. The generated hash reference is passed to this routine. Any field names specified in the first format are available to be used in making a decision on which format to use to decipher the buffer. This routine should return the index of the proper format specification.

When converting a hash to a buffer, this subroutine is invoked first to choose a packing format. Since the same function is used for both conversions, this function should restrict itself to field names that exist in format 0 and those fields should exist in the same place in all formats.

Formats

This is a reference to a list of formats. Each format contains a list of field specifications.

For example:

    my $cvt = new Parse::Binary::FixedFormat {
        Chooser => sub { my $rec=shift;
                         $rec->{RecordType} eq '0' ? 1 : 2
                       },
        Formats => [ [ 'RecordType:A1' ],
                     [ 'RecordType:A1', 'FieldA:A6', 'FieldB:A4:4' ],
                     [ 'RecordType:A1', 'FieldC:A4', 'FieldD:A18' ] ]
        };
    my $rec0 = $cvt->unformat("0FieldAB[0]B[1]B[2]B[3]");
    my $rec1 = $cvt->unformat("1FldC<-----FieldD----->");

In the above example, the "Chooser" function looks at the contents of the "RecordType" field. If it contains a '0', format 1 is used. Otherwise, format 2 is used.

Parse::Binary::FixedFormat::Variants can be used is if it were a Parse::Binary::FixedFormat. The "format" and "unformat" methods will determine which variant to use automatically. The "blank" method requires an argument that specifies the variant number.

Attributes

Each Parse::Binary::FixedFormat::Variants instance contains the following attributes.

Layouts

Contains an array of Parse::Binary::FixedFormat objects. Each of these objects is responsible for converting a single record format variant.

Chooser

This attribute contains the function that chooses which variant to apply to the record.

Releases

4 releases since Debian 10 (Buster); the text changed 2 times.

  1. 10
  2. 11
  3. 12–13

Authors

Audrey Tang <[email protected]>

Based on Data::FixedFormat::Variants, written by Thomas Pfau <[email protected]> http://nbpfaus.net/~pfau/.

From libparse-binary-perl 0.11-2 in Debian 13 (Trixie). Parsed by carta from the page's man source.