sprintf 中日期的 Perl 字符串 %s 说明符无效上下文

标签 perl printf

我正在接受用户输入并打印格式化输出。

在我的格式字符串 %s 中,当我为它提供日期时返回它处于空上下文中。由于它只是打印,我假设字符串足以显示日期。

这是我的代码

use strict;
use warnings;

use Time::Piece;

print "Enter item number: ";
chomp( my $item_number = <STDIN> );

print "Enter unit price: ";
chomp( my $unit_price = <STDIN> );

print "Enter purchase date (mm/dd/yyyy): ";
chomp( my $purchase_date = <STDIN> );

my $tp = Time::Piece->strptime( $purchase_date, '%m/%d/%Y' );

print "\n";
print "Item\t Unit\t Purchase\n\t Price\t Date\n";

sprintf( "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp );
printf("_______________________________________\n");

玩弄它似乎 %s 在 sprintf 中总是有一个无效的上下文。 如果我这样做

sprintf( "%s", $tp );

我收到完全相同的警告。 我将如何在 sprintf 格式的案例中打印日期?或者在 perl 中有比 sprintf 更好的方法吗?

最佳答案

sprintf 不是就地函数,也不进行任何打印;它只格式化字符串。您可以打印 或对其返回值执行其他操作:

print sprintf( "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp );

或者直接printf:

printf "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp;

样本运行:

Enter item number: 456
Enter unit price: 5
Enter purchase date (mm/dd/yyyy): 03/10/1986

Item     Unit    Purchase
         Price   Date
456     5.00    Mon Mar 10 00:00:00 1986
_______________________________________

关于sprintf 中日期的 Perl 字符串 %s 说明符无效上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048516/

相关文章:

mysql - Perl和MySQL用户输入选择一行?

JSON::XS "Usage"呱呱

perl - 使Perl应用程序可移植。构建一个shell脚本或使用Puppet

c - 用 %s 打印字符串打印出错误的数据

c - 为什么解释为 double 的整数会呈现零?

Berkeley DB 中的 Perl 复杂数据结构

csv - 我可以使用 Text::CSV_XS 来解析 csv 格式的字符串而不将其写入磁盘吗?

c++ - 如何将 printf 的功能用于 MFC 中的 EditControl

c - fprintf 没有打印到文件

c - For 循环交替 printf