use String::Scanf; # imports sscanf()
($a, $b, $c, $d) = sscanf("%d+%d %f-%s", $input); ($e, $f, $g, $h) = sscanf("%x %o %s:%3c"); # input defaults to $_
$r = String::Scanf::format_to_re($f);
# works only for Perl 5.005 use String::Scanf qw(); # import nothing
my $s1 = String::Scanf->new("%d+%d %f-%s"); my $s2 = String::Scanf->new("%x %o %s:%3c");
($a, $b, $c, $d) = $s1->sscanf($input); ($e, $f, $g, $h) = $s2->sscanf(); # input defaults to $_
The supported sscanf() formats are as follows:
Decimal floating point number, with optional plus or minus sign, in any of these formats:
1 1. 1.23 .23 1e45 1.e45 1.23e45 .23e45
The exponent has an optional plus or minus sign, and the "e" may also be "E".
The various borderline cases like "Inf" and "Nan" are not recognized.
The sscanf() formats [pnSC] are not supported.
The %s and %c have an optional maximum width, e.g. %4s, in which case at most so many characters are consumed (but fewer characters are also accecpted).
The numeric formats may also have such a width but it is ignored.
The numeric formats may have "[hl" before the main option, e.g. %hd, but since such widths have no meaning in Perl, they are ignored.
Non-format parts of the parameter string are matched literally (e.g. ":" matches as ":"), expect that any whitespace is matched as any whitespace (e.g. " " matches as "\s+").
Copyright (c) 2002 Jarkko Hietaniemi. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.