perl -MFortran::Format -le 'print join "\t",
Fortran::Format->new("E5.1,E5.1")->read("1.1E12.2E2", 1, 1)'
Fortran::Format parse error: invalid or unimplemented token: .; pos=7
E5.1,E5.1
^
called at -e line 1
Expected output:
11 220
The problem is that the format parser ignores commas, and the format
string in this example is parsed as "E5.1E5,.1", with second "E" being
treated as modification to the number of digits in the exponent of the
first "E". Here is the solution:
diff --git a/Format.pm b/Format.pm
index 82e0c65..46c5a73 100644
--- a/Format.pm
+++ b/Format.pm
@@ -460,7 +460,6 @@ sub tokenize {
$state = 3, next if $char =~ /\d/; # number
$state = 5, next if $char =~ /[+-]/; # sign
next if $char eq ' '; # skip space
- next if $char eq ','; # skip comma
push @toks, {tok => $tok, pos => $tok_pos};
} elsif ($state == 1) {
$tok .= $char; # string contents
@@ -1333,6 +1332,8 @@ sub parse {
$tokenizer,
writer => $self->writer
);
+ } elsif ($tok eq ',') { # token separator
+ # skip it
} else {
die "invalid or unimplemented token: $tok\n";
}