NAME

sprintf - formatted print into a string


SYNOPSIS

sprintf FORMAT, LIST


DESCRIPTION

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 the perllocale manpage.

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 the Config manpage:

        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 the Config manpage:

        use Config;
        $Config{d_longdbl} eq 'define' && print "long doubles\n";