欢迎光临优选殡葬网
详情描述

printprintfsprintf 的详细使用案例:

1. print - 基本输出

基本用法

# 简单输出
print "Hello, World!\n";  # 输出:Hello, World!

# 输出多个参数
print "Name: ", "Alice", "\n";  # 输出:Name: Alice

# 使用逗号分隔
my $name = "Bob";
my $age = 25;
print "Name: ", $name, ", Age: ", $age, "\n";

变量插值

my $language = "Perl";
print "Learning $language programming\n";  # 变量插值
print 'Learning $language programming\n'; # 单引号不插值

文件句柄输出

# 输出到文件
open my $fh, '>', 'output.txt' or die $!;
print $fh "This goes to file\n";
close $fh;

# 标准错误输出
print STDERR "Error message\n";

2. printf - 格式化输出

基本格式说明符

my $num = 123.456789;

# 整数
printf "Integer: %d\n", 100;       # 输出:Integer: 100

# 浮点数
printf "Float: %f\n", $num;        # 输出:Float: 123.456789
printf "Float: %.2f\n", $num;      # 输出:Float: 123.46
printf "Float: %8.2f\n", $num;     # 输出:Float:   123.46

# 字符串
printf "String: %s\n", "Hello";    # 输出:String: Hello
printf "String: %10s\n", "Hello";  # 输出:String:      Hello
printf "String: %-10s\n", "Hello"; # 输出:String: Hello     

常用格式说明符

说明符 描述 示例
%d 十进制整数 printf "%d", 100
%u 无符号整数 printf "%u", 100
%o 八进制整数 printf "%o", 64
%x 十六进制小写 printf "%x", 255
%X 十六进制大写 printf "%X", 255
%f 浮点数 printf "%f", 3.14
%e 科学计数法小写 printf "%e", 1000
%E 科学计数法大写 printf "%E", 1000
%g 自动选择 %f 或 %e printf "%g", 1000000
%s 字符串 printf "%s", "text"
%c 字符 printf "%c", 65 (A)
%% 百分号本身 printf "%d%%", 50

复杂示例

# 格式化表格数据
my @names = ("Alice", "Bob", "Charlie");
my @scores = (95.5, 87.3, 91.8);
my @ids = (1001, 1002, 1003);

print "ID     Name       Score\n";
print "-----------------------\n";
for my $i (0..$#names) {
    printf "%04d   %-10s %5.1f\n", $ids[$i], $names[$i], $scores[$i];
}
# 输出:
# ID     Name       Score
# -----------------------
# 1001   Alice       95.5
# 1002   Bob         87.3
# 1003   Charlie     91.8

# 十六进制转储示例
my $data = "Perl";
printf "Hex dump: %v02X\n", $data;  # 输出:Hex dump: 50.65.72.6C

3. sprintf - 格式化字符串(不输出)

基本用法

# 格式化字符串并存储
my $formatted = sprintf("Name: %s, Age: %d", "Alice", 25);
print $formatted, "\n";  # 输出:Name: Alice, Age: 25

# 格式化数字
my $price = sprintf("Price: $%.2f", 19.99);
print $price, "\n";      # 输出:Price: $19.99

# 填充和宽度
my $padded = sprintf("%04d", 42);
print $padded, "\n";     # 输出:0042

my $aligned = sprintf("%-15s: %5.2f", "Total", 123.456);
print $aligned, "\n";    # 输出:Total          : 123.46

高级示例

# 生成固定格式的字符串
sub format_phone {
    my ($number) = @_;
    return sprintf("(%03d) %03d-%04d", 
                   substr($number, 0, 3),
                   substr($number, 3, 3),
                   substr($number, 6, 4));
}

print format_phone("1234567890"), "\n";  # 输出:(123) 456-7890

# 格式化时间
sub format_time {
    my ($h, $m, $s) = @_;
    return sprintf("%02d:%02d:%02d", $h, $m, $s);
}

print format_time(9, 5, 7), "\n";  # 输出:09:05:07

# 进度条生成
sub progress_bar {
    my ($percent, $width) = @_;
    my $bars = int($percent * $width / 100);
    return sprintf("[%-${width}s] %3d%%", '#' x $bars, $percent);
}

print progress_bar(75, 20), "\n";  # 输出:[###############     ]  75%

4. 综合比较与选择

# 三种方式的对比
my $name = "Alice";
my $score = 95.5;
my $id = 1001;

# 1. print - 简单拼接
print "ID: " . $id . ", Name: " . $name . ", Score: " . $score . "\n";

# 2. printf - 直接格式化输出
printf "ID: %04d, Name: %-10s, Score: %5.1f\n", $id, $name, $score;

# 3. sprintf + print - 先格式化再输出
my $output = sprintf("ID: %04d, Name: %-10s, Score: %5.1f", $id, $name, $score);
print $output, "\n";

5. 实用技巧

格式重用

# 创建格式化模板
my $template = "%-10s: \$%8.2f\n";

printf $template, "Apple", 5.99;
printf $template, "Banana", 2.49;
printf $template, "Orange", 3.79;

# 输出:
# Apple     : $    5.99
# Banana    : $    2.49
# Orange    : $    3.79

多语言货币格式化

sub format_currency {
    my ($amount, $locale) = @_;

    if ($locale eq 'US') {
        return sprintf("\$%.2f", $amount);
    } elsif ($locale eq 'EU') {
        return sprintf("%.2f €", $amount);
    } elsif ($locale eq 'JP') {
        return sprintf("¥%d", $amount);
    }
}

print format_currency(1234.56, 'US'), "\n";  # $1234.56
print format_currency(1234.56, 'EU'), "\n";  # 1234.56 €

处理大数据

# 使用逗号分隔千位
sub format_number {
    my ($num) = @_;
    $num = reverse $num;
    $num =~ s/(\d{3})(?=\d)/$1,/g;
    return reverse $num;
}

printf "Formatted: %s\n", format_number("1234567890");
# 输出:Formatted: 1,234,567,890

总结

  • print: 简单输出,适合快速调试和基本输出
  • printf: 需要精确控制输出格式时使用,特别是数字和表格数据
  • sprintf: 需要格式化字符串但不立即输出时使用,适合生成报告或格式文本

选择建议:

  • 简单字符串拼接 → print
  • 格式化输出到屏幕/文件 → printf
  • 生成格式化字符串供后续使用 → sprintf
相关帖子
北海市一条龙殡葬服务办理,白事一条龙,是您的放心选择
北海市一条龙殡葬服务办理,白事一条龙,是您的放心选择
不同地区公务员医疗补助标准是否存在差异,如何查询本地具体政策?
不同地区公务员医疗补助标准是否存在差异,如何查询本地具体政策?
北海市网站优化服务公司-行业网站建设,专业建站公司
北海市网站优化服务公司-行业网站建设,专业建站公司
北海市SEO网络推广#企业网站建设开发,服务可靠
北海市SEO网络推广#企业网站建设开发,服务可靠
遗产继承过程中产生的相关费用与税费主要包括哪些部分?
遗产继承过程中产生的相关费用与税费主要包括哪些部分?
张掖市企业网站建设开发-外贸网站建设,提供一站式建站服务
张掖市企业网站建设开发-外贸网站建设,提供一站式建站服务
南平市网站SEO优化#网站搭建服务,收费透明
南平市网站SEO优化#网站搭建服务,收费透明
果洛殡葬服务价格|白事服务公司,追悼会殡礼
果洛殡葬服务价格|白事服务公司,追悼会殡礼
长沙市丧葬服务办理-白事悼念会服务,正规专业
长沙市丧葬服务办理-白事悼念会服务,正规专业
在补办身份证期间,急需乘坐高铁或住酒店,应该办理什么临时证件?
在补办身份证期间,急需乘坐高铁或住酒店,应该办理什么临时证件?
2026年,劳动者被辞退时,经济补偿金的N究竟应该如何计算?
2026年,劳动者被辞退时,经济补偿金的N究竟应该如何计算?
5G套餐普及后,降档到4G套餐是否还能满足日常的社交与娱乐需求?
5G套餐普及后,降档到4G套餐是否还能满足日常的社交与娱乐需求?
2026年去派出所开具户籍证明,整个流程通常需要花费多长时间?
2026年去派出所开具户籍证明,整个流程通常需要花费多长时间?
身份证丢失后,是否会直接影响名下绑定的银行卡和手机卡安全?
身份证丢失后,是否会直接影响名下绑定的银行卡和手机卡安全?
唐山市苹果系统app开发#商城网站开发建设,专业建站公司
唐山市苹果系统app开发#商城网站开发建设,专业建站公司
如何帮助孩子在课后服务时段与不同年级的同学进行良性的互动和共同学习?
如何帮助孩子在课后服务时段与不同年级的同学进行良性的互动和共同学习?
家用电器待机功耗不容小觑,如何彻底关闭这些“隐形”的电能消耗?
家用电器待机功耗不容小觑,如何彻底关闭这些“隐形”的电能消耗?
乌鲁木齐市独立网站制作-精准获客引流,模板建站
乌鲁木齐市独立网站制作-精准获客引流,模板建站
2026年,我们普通人可以通过哪些日常小事为保护野生动物贡献力量?
2026年,我们普通人可以通过哪些日常小事为保护野生动物贡献力量?
沈阳市殡仪服务公司,殡葬服务车出租,全城服务
沈阳市殡仪服务公司,殡葬服务车出租,全城服务