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

print、printf 和 sprintf 的详细使用案例:

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
相关帖子
北海市iphone软件开发#商城网站开发设计,服务可靠
北海市iphone软件开发#商城网站开发设计,服务可靠
北海市办理殡葬服务-告别会殡礼,价格透明,1小时上门
北海市办理殡葬服务-告别会殡礼,价格透明,1小时上门
从长远看,个人的幸福感和生活满意度与婚姻状态、子女数量有何关联?
从长远看,个人的幸福感和生活满意度与婚姻状态、子女数量有何关联?
想打造一个家庭图书馆或工作室,农村自建房哪个位置比较安静适合?
想打造一个家庭图书馆或工作室,农村自建房哪个位置比较安静适合?
北海市一条龙殡葬服务办理,白事一条龙,是您的放心选择
北海市一条龙殡葬服务办理,白事一条龙,是您的放心选择
不同地区公务员医疗补助标准是否存在差异,如何查询本地具体政策?
不同地区公务员医疗补助标准是否存在差异,如何查询本地具体政策?
六盘水安卓app开发#网站定制开发公司,多年专业建站经验
六盘水安卓app开发#网站定制开发公司,多年专业建站经验
河池市丧葬一条龙服务电话,丧事办理,全城服务
河池市丧葬一条龙服务电话,丧事办理,全城服务
廊坊市殡葬服务正规公司|白事服务,殡葬追悼会策划
廊坊市殡葬服务正规公司|白事服务,殡葬追悼会策划
写字楼门店房抵押贷款可以用于装修吗?装修用途条件与流程
写字楼门店房抵押贷款可以用于装修吗?装修用途条件与流程
四平市专业网站建设优化-erp系统开发,多年建站经验
四平市专业网站建设优化-erp系统开发,多年建站经验
岳阳市殡仪服务流程-出租冰棺服务,快速上门
岳阳市殡仪服务流程-出租冰棺服务,快速上门
玉树殡葬服务一站式办理-丧礼服务,个性化服务
玉树殡葬服务一站式办理-丧礼服务,个性化服务
许昌市app开发#网站建设制作,专业建站公司
许昌市app开发#网站建设制作,专业建站公司
达州市网站开发正规公司-苹果系统app开发,服务可靠
达州市网站开发正规公司-苹果系统app开发,服务可靠
榆林市殡葬一条龙公司电话,白事殡葬一条龙服务,安全可靠
榆林市殡葬一条龙公司电话,白事殡葬一条龙服务,安全可靠
当遇到劳动合同纠纷时,除了劳动仲裁,还有哪些高效便捷的解决途径?
当遇到劳动合同纠纷时,除了劳动仲裁,还有哪些高效便捷的解决途径?
小区房子抵押贷款和别墅抵押贷款有什么区别?这五点差异必须了解
小区房子抵押贷款和别墅抵押贷款有什么区别?这五点差异必须了解
诸暨市殡葬服务电话|殡仪服务,丧葬追思会服务
诸暨市殡葬服务电话|殡仪服务,丧葬追思会服务
洛阳市短视频运营推广#网站定制开发,收费标准
洛阳市短视频运营推广#网站定制开发,收费标准
过桥垫资评估费怎么收?评估费收费标准与计算方式详细说明
过桥垫资评估费怎么收?评估费收费标准与计算方式详细说明