Perl,sprintf生成的字符串长度错误?

Perl,sprintf生成的字符串长度错误?,perl,printf,Perl,Printf,我正在创建一个字符串,需要用空格填充到每个字段的最大长度,如下所示: 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 ) );
$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
。我一定在做傻事


理想情况下,我想要一把尺子作为第一行标记*每个字段应该在哪里。因为我似乎不能准确地报告这是在哪里,我被卡住了,我无法复制。以下给出了正确的值,甚至可以追溯到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中的bug相比,您的代码更可能出现问题。你的值不是你想象中的值,等等。与其说变量包含值,不如告诉我们你给了变量那个值。与其说输出不是实际输出,不如告诉我们实际输出,等等。

从这里看,返回40?看起来不错。无法重现您的问题,插入100后,它会按照预期工作。最有可能的错误是哈希不包含您认为它包含的数字,因此请尝试打印
$fieldlength->{FOO}
值。此问题在其当前状态下无法回答,并且将/应该很快被搁置,除非您使用请求的信息对其进行更新,雪崩博士。由于未知的原因,这是一台服务器出现故障,切换到另一台服务器后,我无法重现这种奇怪。相同的操作系统,补丁级别,Perl版本。我们的管理员已经停止了服务器的生产。很抱歉给您添麻烦。由于未知原因,这是一台服务器出现故障,切换到另一台服务器后,我无法重现这种奇怪的情况。相同的操作系统,补丁级别,Perl版本。我们的管理员已经停止了服务器的生产。抱歉给你添麻烦了。