我正在创建一个字符串,需要用空格填充到每个字段的最大长度,如下所示:
my $string;
$string .= sprintf("%*s", $fieldlength->{FOO}, uc( $foo ) );
$string .= sprintf("%*s", $fieldlength->{BAR}, uc( $bar ) );
这是一堆记录的循环。 当我将$ string写入文件时,它看起来完全符合我的预期,一切都在正确的位置。当我打印$ string的长度时,它错了吗?
my $string;
$string .= sprintf("%*s", $fieldlength->{FOO}, uc( $foo ) );
warn length($string);
$string .= sprintf("%*s", $fieldlength->{BAR}, uc( $bar ) );
warn length($string);
在此示例中,$fieldlength->{FOO}
为100
,警告返回40
。我必须做些蠢事。
理想情况下,我喜欢某种标尺作为第一行标记*,每个字段应该是。因为我似乎无法准确地报告这是我被困的地方
答案 0 :(得分:1)
我无法重现。以下给出了正确的值,甚至可以追溯到5.8.8。
use strict;
use warnings;
my $fieldlength;
$fieldlength->{FOO} = 100;
$fieldlength->{BAR} = 200;
my $foo = "foo";
my $bar = "bar";
my $string;
$string .= sprintf("%*s", $fieldlength->{FOO}, uc( $foo ) );
$string .= sprintf("%*s", $fieldlength->{BAR}, uc( $bar ) );
print(length($string), "\n"); # 300
与Perl中的错误相比,您的代码更容易出现问题。你的价值观并不是你认为的那样,等等。而不是声称一个变量包含一个值,告诉我们你给变量这个值。而不是说输出是不是它,向我们显示实际输出等。