perl - 如何在 Perl 中从 printf 呈现未定义的值?

标签 perl printf undef

我正在寻找一种优雅的方式来表示在格式化数字通常呈现的情况下未定义的值。我会做一个小例子。首先,你当然不能使用这个:

#!/usr/bin/perl
use strict;
use warnings;
for my $s (1, 1.2, undef, 1.3) {
    printf "%5.2f\n", $s;
}

...因为“使用警告”在第三次迭代中用“使用未初始化的值...”来提醒您。所以下一步是这样的:
#!/usr/bin/perl
use strict;
use warnings;
for my $s (1, 1.2, undef, 1.3) {
    printf "%5.2f\n", $s//0;
}

而且,男孩,顺便说一下,我喜欢新的 5.10 '//' 运算符吗?但这也不是我想要的,因为 $s 的值不是零,它是未定义的。我真正想要的是这样的:
#!/usr/bin/perl
use strict;
use warnings;
for my $s (1, 1.2, undef, 1.3) {
    printf "%5.2f\n", $s//q();
}

...但我不能,因为这会在第三个值上生成“参数”不是数字...”问题。

这把我带到了我的问题的门口。我当然可以编写代码来检查我发出的每个数字的定义性,并创建一个完全不同的非基于 %f 的 printf 格式字符串,但是,好吧,......哎呀。

有没有人定义了一种很好的方法来处理这种类型的需求?

最佳答案

它不漂亮,但我只是这样做

defined($s) ? printf "%f.2f\n", $s : print "undef\n";

关于perl - 如何在 Perl 中从 printf 呈现未定义的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547042/

相关文章:

perl - 了解 perl 的赋值或运算符与赋值和逻辑或运算符的组合之间的行为差​​异

perl - 如何使用 Perl 实现配置菜单

java - 是否可以编写打印语句本身的 Java printf 语句?

c - 循环遍历 C 预处理器中的 header

c++ - 取消定义和重新定义 __cplusplus 宏

regex - 使用 perl 的多个正则表达式

perl - 关于 DBD::Pg 的 AutoCommit,文档是否存在谎言?

perl - 有一个 perl 散列是什么意思{}{}

c - 如何打印 fread()?

c++ - 调用 printf 时隐式转换为 char*