Returns a string formatted by the usual printf
conventions of the C library function sprintf
. See sprintf(3) or printf(3) on your system for an explanation of the general principles.
Perl does its own sprintf
formatting--it emulates the C function sprintf
, but it doesn't use it (except for floating-point numbers, and even then only the standard modifiers are allowed). As a result, any non-standard extensions in your local sprintf
are not available from Perl.
Perl's sprintf
permits the following universally-known conversions:
%% a percent sign
%c a character with the given number
%s a string
%d a signed integer, in decimal
%u an unsigned integer, in decimal
%o an unsigned integer, in octal
%x an unsigned integer, in hexadecimal
%e a floating-point number, in scientific notation
%f a floating-point number, in fixed decimal notation
%g a floating-point number, in %e or %f notation
In addition, Perl permits the following widely-supported conversions:
%X like %x, but using upper-case letters
%E like %e, but using an upper-case "E"
%G like %g, but with an upper-case "E" (if applicable)
%b an unsigned integer, in binary
%p a pointer (outputs the Perl value's address in hexadecimal)
%n special: *stores* the number of characters output so far
into the next variable in the parameter list
Finally, for backward (and we do mean "backward") compatibility, Perl permits these unnecessary but widely-supported conversions:
%i a synonym for %d
%D a synonym for %ld
%U a synonym for %lu
%O a synonym for %lo
%F a synonym for %f
Perl permits the following universally-known flags between the %
and the conversion letter:
space prefix positive number with a space
+ prefix positive number with a plus sign
- left-justify within the field
0 use zeros, not spaces, to right-justify
# prefix non-zero octal with "0", non-zero hex with "0x"
number minimum field width
.number "precision": digits after decimal point for
floating-point, max length for string, minimum length
for integer
l interpret integer as C type "long" or "unsigned long"
h interpret integer as C type "short" or "unsigned short"
If no flags, interpret integer as C type "int" or "unsigned"
There are also two Perl-specific flags:
V interpret integer as Perl's standard integer type
v interpret string as a vector of integers, output as
numbers separated either by dots, or by an arbitrary
string received from the argument list when the flag
is preceded by C<*>
Where a number would appear in the flags, an asterisk (*
) may be used instead, in which case Perl uses the next item in the parameter list as the given number (that is, as the field width or precision). If a field width obtained through *
is negative, it has the same effect as the -
flag: left-justification.
The v
flag is useful for displaying ordinal values of characters in arbitrary strings:
printf "version is v%vd\n", $^V; # Perl's version
printf "address is %*vX\n", ":", $addr; # IPv6 address
printf "bits are %*vb\n", " ", $bits; # random bitstring
If use locale
is in effect, the character used for the decimal point in formatted real numbers is affected by the LC_NUMERIC locale. See perllocale.
If Perl understands "quads" (64-bit integers) (this requires either that the platform natively support quads or that Perl be specifically compiled to support quads), the characters
d u o x X b i D U O
print quads, and they may optionally be preceded by
ll L q
For example
%lld %16LX %qo
You can find out whether your Perl supports quads via Config:
use Config;
($Config{use64bitint} eq 'define' || $Config{longsize} == 8) &&
print "quads\n";
If Perl understands "long doubles" (this requires that the platform support long doubles), the flags
e f g E F G
may optionally be preceded by
ll L
For example
%llf %Lg
You can find out whether your Perl supports long doubles via Config:
use Config;
$Config{d_longdbl} eq 'define' && print "long doubles\n";