NAME
String::Scanf - emulate sscanf() of the C library
SYNOPSIS
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);
or
# works only for Perl 5.005 or later
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 $_
DESCRIPTION
String::Scanf supports scanning strings for data using formats similar to the libc/stdio sscanf().
The supported sscanf() formats are as follows:
- %d
-
Decimal integer, with optional plus or minus sign.
- %u
-
Decimal unsigned integer, with optional plus sign.
- %x
-
Hexadecimal unsigned integer, with optional "0x" or "0x" in front.
- %o
-
Octal unsigned integer.
- %e %f %g
-
(The [efg] work identically.)
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 beE
.The various borderline cases like
Inf
andNan
are not recognized. - %s
-
A non-whitespace string.
- %c
-
A string of characters. An array reference is returned containing the numerical values of the characters.
- %%
-
A literal
%
.
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+
).
WARNING
The numeric formats match only something that looks like a number, they do not care whether it fits into the numbers of Perl. In other words, 123e456789
is valid for sscanf()
, but quite probably it won't fit into your Perl's numbers. Consider using the various Math::* modules instead.
AUTHOR, COPYRIGHT AND LICENSE
Jarkko Hietaniemi <jhi@iki.fi>
Copyright (c) 2002,2004 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.