NAME JSON::Types - variable type utility for JSON encoding SYNOPSIS # Export type functions by default use JSON; use JSON::Types; print encode_json({ number => number "123", string => string 123, bool => bool "True value", }); # => {"number":123,"string":"123","bool":true} # Non export interface use JSON::Types (); print encode_json({ number => JSON::Types::number "123", string => JSON::Types::string 123, bool => JSON::Types::bool "True value", }); DESCRIPTION The type mappings between JSON and Perl is annoying things. For example, use JSON; my $number = 123; warn "[DEBUG] number:$number\n" if $ENV{DEBUG}; print encode_json([ $number ]); Output of this code depends on whether DEBUG environment is set or not. If set, result is "[123]". If not to set, result is "["123"]". This is normal behaviour on Perl though, it sometimes causes unexpected JSON results. There is a solution about this: print encode_json([ $number + 0 ]); This code always outputs "[123]". But the code is a bit ugly and not readable at all. This module provides some functions to fix this variable types issue: number $foo; # is always number string $foo; # is always string bool $foo; # is always bool You can fix above code by using this module like this: use JSON; use JSON::Types; my $number = 123; warn "[DEBUG] number:$number\n" if $ENV{DEBUG}; print encode_json([ number $number ]); FUNCTIONS There is three functions and all functions is exported by default. If you don't want this exported functions, pass empty list to use line: use JSON::Types (); You should specify full function name when this case, like "JSON::Types::number $foo" or etc. string number bool AUTHOR Daisuke Murase COPYRIGHT AND LICENSE Copyright (c) 2012 Daisuke Murase. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module.