【发布时间】:2016-05-15 14:46:27
【问题描述】:
根据我的阅读,perl 没有整数或字符串的真正类型,对他来说任何 $variable 都是标量。
最近我在一个旧脚本上遇到了很多麻烦,该脚本正在生成另一个进程所需的 JSON 对象,其中 JSON 中的值必须是整数,经过一些调试后我发现因为一个简单的打印函数:
JSON::encode_json
正在生成一个字符串而不是一个整数,这是我的示例:
use strict;
use warnings;
use JSON;
my $score1 = 998;
my $score2 = 999;
print "score1: ".$score1."\n";
my %hash_object = ( score1 => $score1, score2 => $score2 );
my $json_str = encode_json(\%hash_object); # This will work now
print "$json_str";
它输出:
score1: 998
{"score1":"998","score2":999}
不知何故 perl 变量有一个类型,或者至少 JSON::encode_json 是这样认为的。
有没有办法以编程方式找到这种类型以及为什么在进行上述连接这样的操作时会改变这种类型?
【问题讨论】:
-
%arr是一个可怕的变量名称。首先,它是一个hash,而不是一个数组,其次,标识符应该反映一个变量用途,而不是它的性质。%说它是一个哈希,所以%hash是多余的,有点可笑。但有时没什么好说的,尤其是关于聚合数据结构,我经常求助于%data,我认为这很好 -
感谢您的建议,我同意您的观点并在我的示例中进行了一些更改。
-
只是一个想法建议,不确定它在实践中是否有效。但是你可以用 int 包装 score1 吗?例如:
my %hash_object = ( score1 => int($score1), score2 => $score2 );