ム。あなたは間違った前提から始めました。
Perl には、数値と文字列を区別する意味のある型システムがありません。任意の値をbothにすることができます。指定された値が数値のみと見なされるかどうかは、Perl 言語だけを使用して決定することはできません (ただし、 のようなモジュールを使用できますDevel::Peek
)。与えられた値が元々どの型であったかを知ることはまったく不可能です。
my $x = 1; # an integer (IV), right?
say "x = $x"; # not any more! It's a PVIV now (string and integer)
さらに、ハッシュ マップ (「辞書」) では、キーの型は常に文字列に強制されます。配列では、キーは常に整数に強制されます。他のタイプは偽造することしかできません。
これは、テキストを解析する場合には素晴らしいことですが、もちろん、データ構造をシリアライズする際には終わりのない苦痛が伴います。JSON は Perl のデータ構造に完全に対応しているため、シリアライゼーションがおそらく存在しない情報を推測する可能性があるという妄想から身を守るために、JSON (または JSON のスーパーセットである YAML) に固執することをお勧めします。
これから何を学びますか?
相互運用性が重要な場合は、Python でクリエイティブなディクショナリ タイプを使用しないでください。
本当に重要な場合は、シリアライゼーションでいつでも型情報をエンコードできます (ヒント: おそらくそうではありません)。{"type":"interger dict", "data":{"1":"foo","2":"bar"}}
また、XML が遅すぎると片付けるのも時期尚早です。メソッドには同意しませんが、この最近の記事を参照してください。また、JS に制限されています (展望については先週のHN スレッド)。
ネイティブの場合、おそらく十分に高速であるため、純粋な Perl または純粋な Python の実装を使用しないことは明らかです。これは、JSON パーサー、YAML パーサー、およびその他のパーサーにも当てはまります。