我在寻找一种优雅的方式来表示在格式化的数字通常渲染的情况下未定义的值。我要工作了一个小例子。对于初学者来说,你当然不能这样使用:

#!/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-基于格式化字符串,但是,很好,...呸。

有没有人定义一个不错的方式来处理这种类型的需求?

有帮助吗?

解决方案

我不认为有什么的的它 - 这是你想要做什么

use strict;
use warnings;

my($raw) = [1, 1.2, undef, 1.3];
my($formatted) = [map((defined $_ ? sprintf('%5.2f', $_) : "(undef)"), @$raw)];

print '$formatted: <', join('> <', @{$formatted}), qq(>\n);

其他提示

这不是很漂亮,但我只是做它作为

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

我觉得很好的方式是写/获取通用prettyprinter这需要不管你扔它,然后做:

#!/usr/bin/perl
use strict;
use warnings;
use MyPrettyPrinter;
for my $s (1, 1.2, undef, 1.3) {
    print MyPrettyPrinted($s), "\n";
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top