Parse::Binary::FixedFormat::Variants(3pm) | User Contributed Perl Documentation | Parse::Binary::FixedFormat::Variants(3pm) |
Parse::Binary::FixedFormat::Variants - Convert between variant records and hashes
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.
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.
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.
Each Parse::Binary::FixedFormat::Variants instance contains the following attributes.
Audrey Tang <cpan@audreyt.org>
Based on Data::FixedFormat::Variants, written by Thomas Pfau <pfau@nbpfaus.net> http://nbpfaus.net/~pfau/.
Copyright 2004-2009 by Audrey Tang <cpan@audreyt.org>.
Copyright (C) 2000,2002 Thomas Pfau. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2022-12-04 | perl v5.36.0 |