parse-wormedit: declare hardcoded bytes in unpackf template
[wormy.git] / Parse / Binary / Nested.pm
index 9bac394264d2a35709bc5fc4caa255c18ac944f0..872ccaac1e772d0b97384c1b93b2307cd8f0f715 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 
 use Carp;
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
 sub new {
        my ($class, $format) = @_;
@@ -26,6 +26,7 @@ sub template {
                                : $count."X[$count]$count/($value)";
                }
                else {
+                       $value =~ s/=\d*//g;  # hardcoded values
                        $value =~ s/^C(a)(\d+)/$1 . ($2 + 1)/e;  # length prefix
                }
                $value;
@@ -53,6 +54,10 @@ sub convert {
                elsif ($template =~ /^(?:[xX]\d*)*$/) {
                        next;  # no values
                }
+               elsif ($template =~ /=(\d+)?/) {
+                       $res{$field} = $1;
+                       next;
+               }
                $res{$field} = shift @$data;
        }
        return \%res;
@@ -117,6 +122,21 @@ to its length.
 This behaviour is very similar to C<(C/a@x$length)>, except that it never reads
 more than the given number of bytes.
 
+=item *
+
+Hardcoded values can be inserted using C<=$number> values.
+This can for example be useful to retain forwards-compatibility:
+
+       rows => ['C',
+               type => '=1', # nothing read
+               data => 'S',
+       ]
+       
+       rows => ['C',
+               type => 'C',
+               data => 'S',
+       ]
+
 =back
 
 =head1 AUTHOR