我不明白为什么join在下面的示例中更改JSON::to_string的输出:
#!/usr/bin/perl
use v5.26;
use Data::Dumper;
use JSON;
my @version = (1, 2, 3, 4);
say "version: ", join ".", @version; # comment this line out
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;
say Dumper(\@version);
say to_json(\@version);带有包含join的行的输出
version: 1.2.3.4
[1,2,3,4]
["1","2","3","4"]但是用join注释掉一行时,to_json的输出突然显示整数而不是字符串,尽管Data::Dumper的输出仍然是相同的:
[1,2,3,4]
[1,2,3,4]发布于 2020-12-14 20:59:39
这是您必须在Perl中保持数据纯度的少数几次之一。一旦创建了某种类型的变量,就不能在任何其他类型的上下文中使用它。如果确实需要,首先将其复制到一个新变量以保留原始变量。
use feature 'say';
use Data::Dumper;
use JSON;
my @version = (1, 2, 3, 4);
{ say "version: ", join ".", my @copy = @version; }
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;
say Dumper(\@version);
say to_json(\@version);指纹:
version: 1.2.3.4
[1,2,3,4]
[1,2,3,4]我还建议您使用Cpanel::JSON::XS,因为这是一个需要禁止使用的领域!它非常努力地使数据类型正确。还对转换问题进行了一些讨论。
HTH
https://stackoverflow.com/questions/65288524
复制相似问题