NAME
String::Scanf - emulate sscanf() of the C library
SYNOPSIS
(
$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
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.