Perl 提供了多种方式来格式化输出数据,使其更易读或符合特定需求。本文将介绍Perl中常用的格式化输出方法,包括 printfsprintf 和其他工具。


目录

  1. 格式化输出概述
  2. 使用 print 输出
  3. 使用 printf 格式化
  4. 使用 sprintf 格式化
  5. 使用格式化模块
  6. 时间日期格式化
  7. 参考资料

1. 格式化输出概述

Perl 的格式化输出用于控制数据的显示方式,常用于:

  • 对齐数字或文本。
  • 指定小数位数。
  • 生成结构化报告。

主要工具包括内置函数 printfsprintf,以及模块支持。

站内链接:了解基础输出,见 Perl 基础语法


2. 使用 print 输出

print 是最简单的输出方式,支持字符串插值:

use strict;
use warnings;

my $name = "Alice";
my $age = 25;
print "$name is $age years old.\n";  # Alice is 25 years old.

限制

  • 无法精确控制宽度或精度。
  • 依赖空格或换行符手动调整。

3. 使用 printf 格式化

printf 直接输出格式化结果,类似C语言:

基本格式

my $num = 42.567;
printf("整数:%d, 浮点数:%.2f\n", $num, $num);  # 整数:42, 浮点数:42.57

常用格式符

  • %d:整数
  • %f:浮点数
  • %s:字符串
  • %x:十六进制(小写)
  • %X:十六进制(大写)

对齐与宽度

my $str = "Perl";
printf("|%10s|\n", $str);  # |      Perl|(右对齐)
printf("|%-10s|\n", $str); # |Perl      |(左对齐)
printf("|%10.5s|\n", $str); # |     Perl|(截取5字符)

4. 使用 sprintf 格式化

sprintf 返回格式化字符串,不直接输出:

my $price = 19.95;
my $formatted = sprintf("价格:\$%.2f", $price);
print "$formatted\n";  # 价格:$19.95

结合变量

my $x = 123;
my $y = 456.789;
my $result = sprintf("%03d - %.1f", $x, $y);
print "$result\n";  # 123 - 456.8(补零,保留1位小数)

5. 使用格式化模块

Perl 内置 format(较老式)

定义输出模板:

format STDOUT =
@<<<<< @>>>>>
$name,  $age
.

$name = "Bob";
$age = 30;
write;  # 输出:Bob         30

注意format 已较少使用,推荐现代模块。

Text::Table 模块

生成表格:

use Text::Table;

my $tb = Text::Table->new("Name", "Age");
$tb->add("Alice", 25);
$tb->add("Bob", 30);
print $tb;
# 输出:
# Name  Age
# Alice 25
# Bob   30

安装:cpan Text::Table


6. 时间日期格式化

使用 POSIX::strftime

use POSIX qw(strftime);

my $now = strftime("%Y-%m-%d %H:%M:%S", localtime);
print "当前时间:$now\n";  # 如 2025-03-25 12:34:56

使用 DateTime

use DateTime;

my $dt = DateTime->now;
print $dt->strftime("%A, %B %d, %Y");  # 如 Tuesday, March 25, 2025

站内链接:更多时间处理,见 Perl 时间日期


7. 参考资料

站内链接

出站链接

其他资源

  • 《Learning Perl》 – 输出格式化章节。
  • X社区:搜索 #PerlFormatting 获取示例。

这篇指南详细介绍了Perl中格式化输出的多种方法,从简单插值到高级模块应用。如果需要更深入的内容(比如自定义模板或性能对比),请告诉我!