NAME
    boolean - Boolean support for Perl

SYNOPSIS
        use boolean;

        do &always if true;
        do &never if false;

        do &maybe if boolean($value)->isTrue;

    and:

        use boolean ':all';

        $guess = int(rand(2)) % 2 ? true : false;

        do &something if isTrue($guess);
        do &something_else if isFalse($guess);

    and:

        use boolean -truth;

        die unless ref(42 == 42) eq 'boolean';
        die unless ("foo" =~ /bar/) eq '0';

DESCRIPTION
    Most programming languages have a native "Boolean" data type. Perl does
    not.

    Perl has a simple and well known Truth System. The following scalar
    values are false:

        $false1 = undef;
        $false2 = 0;
        $false3 = 0.0;
        $false4 = '';
        $false5 = '0';

    Every other scalar value is true.

    This module provides basic Boolean support, by defining two special
    objects: "true" and "false".

RATIONALE
    When sharing data between programming languages, it is important to
    support the same group of basic types. In Perlish programming languages,
    these types include: Hash, Array, String, Number, Null and Boolean. Perl
    lacks native Boolean support.

    Data interchange modules like YAML and JSON can now "use boolean" to
    encode*decode*roundtrip Boolean values.

FUNCTIONS
    This module defines the following functions:

    "true"
        This function returns a scalar value which will evaluate to true.
        The value is a singleton object, meaning there is only one "true"
        value in a Perl process at any time. You can check to see whether
        the value is the "true" object with the isTrue function described
        below.

    "false"
        This function returns a scalar value which will evaluate to false.
        The value is a singleton object, meaning there is only one "false"
        value in a Perl process at any time. You can check to see whether
        the value is the "false" object with the isFalse function described
        below.

    "boolean($scalar)"
        Casts the scalar value to a boolean value. If $scalar is true, it
        returns "boolean::true", otherwise it returns "boolean::false".

    "isTrue($scalar)"
        Returns "boolean::true" if the scalar passed to it is the
        "boolean::true" object. Returns "boolean::false" otherwise.

    "isFalse($scalar)"
        Returns "boolean::true" if the scalar passed to it is the
        "boolean::false" object. Returns "boolean::false" otherwise.

    "isBoolean($scalar)"
        Returns "boolean::true" if the scalar passed to it is the
        "boolean::true" or "boolean::false" object. Returns "boolean::false"
        otherwise.

METHODS
    Since true and false return objects, you can call methods on them.

    "$boolean->isTrue"
        Same as isTrue($boolean).

    "$boolean->isFalse"
        Same as isFalse($boolean).

USE OPTIONS
    By default this module exports the "true", "false" and "boolean"
    functions.

    The module also defines these export tags:

    ":all"
        Exports "true", "false", "boolean", "isTrue", "isFalse", "isBoolean"

    "-truth"
        You can specify the "-truth" option to override truth operators to
        return "boolean" values.

            use boolean -truth;
            print ref("hello" eq "world"), "\n";

        Prints:

            boolean

        "-truth" can be used with the other import options.

JSON SUPPORT
    JSON::MaybeXS (or less preferably JSON.pm ) will encode Perl data with
    boolean.pm values correctly if you use the "convert_blessed" option:

        use JSON::MaybeXS;
        use boolean -truth;
        my $json = JSON::MaybeXS->new->convert_blessed;
        say $json->encode({false => (0 == 1)});     # Says: '{"false":false}',

AUTHOR
    Ingy döt Net <ingy@cpan.org>

COPYRIGHT AND LICENSE
    Copyright 2007-2015. Ingy döt Net.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    See <http://www.perl.com/perl/misc/Artistic.html>

