ZetCode

Perl sprintf Function

last modified April 4, 2025

The Perl sprintf function formats strings according to a format specifier. It returns a formatted string rather than printing it directly.

sprintf is similar to printf but returns the result instead of outputting it. It's useful for creating precisely formatted strings.

Basic sprintf Usage

The simplest use of sprintf formats a string with placeholders.

basic.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $name = "Alice";
my $age = 28;

my $result = sprintf("Hello, %s. You are %d years old.", $name, $age);
print "$result\n";

This example shows basic string and number formatting. %s is for strings, %d for integers. The function returns the formatted string.

$ ./basic.pl
Hello, Alice. You are 28 years old.

Number Formatting

sprintf provides precise control over number formatting.

numbers.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $pi = 3.1415926535;
my $price = 19.99;

my $formatted = sprintf("Pi: %.2f\nPrice: %08.2f\nHex: 0x%x", $pi, $price, 255);
print $formatted;

We format numbers with different specifications: %.2f shows 2 decimal places, %08.2f pads with zeros, and %x converts to hex.

$ ./numbers.pl
Pi: 3.14
Price: 0019.99
Hex: 0xff

String Padding and Alignment

Strings can be padded and aligned using width specifiers.

padding.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $text = "Perl";
my $left = sprintf("|%-10s|", $text);
my $right = sprintf("|%10s|", $text);
my $center = sprintf("|%*s|", 10 - length($text), $text);

print "$left\n$right\n$center\n";

%-10s left-aligns, %10s right-aligns. The center alignment requires manual calculation. Negative width left-aligns the text.

$ ./padding.pl
|Perl      |
|      Perl|
|   Perl|

Date and Time Formatting

sprintf is useful for formatting date and time components.

datetime.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my ($sec, $min, $hour, $mday, $mon, $year) = localtime();
$year += 1900;
$mon += 1;

my $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d",
    $year, $mon, $mday, $hour, $min, $sec);
print "Current date/time: $date\n";

We format date/time components with zero-padding. Each number gets exactly 2 digits with %02d, ensuring consistent formatting.

$ ./datetime.pl
Current date/time: 2025-04-04 14:30:15

Hexadecimal and Binary Output

sprintf can convert numbers to different bases.

bases.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $num = 255;
my $hex = sprintf("Hex: 0x%x 0x%X", $num, $num);
my $bin = sprintf("Bin: %b", $num);
my $oct = sprintf("Oct: %o", $num);

print "$hex\n$bin\n$oct\n";

Format specifiers: %x for lowercase hex, %X for uppercase, %b for binary, and %o for octal.

$ ./bases.pl
Hex: 0xff 0xFF
Bin: 11111111
Oct: 377

Floating-Point Precision

Precision control is essential for scientific and financial calculations.

precision.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $value = 123.456789;
my $sci = sprintf("%.3e", $value);
my $fixed = sprintf("%.2f", $value);
my $general = sprintf("%g", $value);

print "Scientific: $sci\nFixed: $fixed\nGeneral: $general\n";

%e for scientific notation, %f for fixed-point, and %g for "smart" shortest representation. Precision follows the decimal point.

$ ./precision.pl
Scientific: 1.235e+02
Fixed: 123.46
General: 123.457

Complex Formatting

sprintf can handle complex formatting with multiple values.

complex.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my @data = (
    ["Alice", 28, 45000.50],
    ["Bob", 32, 52000.75],
    ["Charlie", 45, 68000.00]
);

foreach my $row (@data) {
    my $line = sprintf("%-10s %2d years \$%8.2f", @$row);
    print "$line\n";
}

This formats a table with aligned columns: left-aligned names, right-aligned numbers with padding. The dollar sign is escaped in the format string.

$ ./complex.pl
Alice      28 years $45000.50
Bob        32 years $52000.75
Charlie    45 years $68000.00

Best Practices

Source

Perl sprintf Documentation

This tutorial covered Perl's sprintf function with practical examples demonstrating its powerful string formatting capabilities.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Perl tutorials.