---
name: "Badger::Logic"
section: "3pm"
platform: "linux"
package: "libbadger-perl"
version: "0.16-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Badger::Logic"
---

# Badger::Logic(3pm)

parse and evaluate simple logical expressions

## NAME

Badger::Logic - parse and evaluate simple logical expressions

## SYNOPSIS

```
    use Badger::Logic 'Logic';
    my $logic  = Logic('animal and (eats_nuts or eats_berries)');
    my $values = {
        animal    => 1,
        eats_nuts => 1,
    }
    if ($logic->test($values)) {
        print "This is an animal that eats nuts or berries\n";
    }
```

## DESCRIPTION

This module implements a simple parser and evaluator for boolean logic expressions.  It evolved from a piece of code that I originally wrote to handle role-based authentication in web applications.

## EXPORTABLE SUBROUTINES

### LOGIC

This is a shortcut alias to `"Badger::Logic"`.

```
    use Badger::Logic 'LOGIC';
    my $logic = LOGIC->new($expr);      # same as Badger::Logic->new($expr);
```

### Logic()

This subroutine returns the name of the `"Badger::Logic"` class when called without arguments. Thus it can be used as an alias for `"Badger::Logic"` as per LOGIC.

```
    use Badger::Logic 'Logic';
    my $logic = Logic->new($expr);      # same as Badger::Logic->new($expr);
```

When called with arguments, it creates a new `"Badger::Logic"` object.

```
    my $logic = Logic($expr);           # same as Badger::Logic->new($expr);
```

## METHODS

### new($expr)

Constructor method to create a new `"Badger::Logic"` object from an expression.

```
    my $logic = Badger::Logic->new('animal and (cat or dog)');
```

### evaluate($values) / test($values)

Method to evaluate the expression.  A reference to a hash array should be passed containing the values that the expression can test.

```
    my $values = {
        animal => 1,
        cat    => 1,
    };
    if ($logic->evaluate($values)) {
        print "This animal is a cat or a dog\n";
    }
```

### tree()

Returns a reference to the root of a tree of `"Badger::Logic::Node"` objects that represent the parsed expression.

### text()

Returns a text representation of the logic expression.

## INTERNAL METHODS

### parse($text)

Main method to parse a logical expression.  This calls **parse\_expr()** and then checks that all of the text has been successfully parsed.  It returns a reference to a `"Badger::Logic::Node"` object.

### parse\_expr($text)

Method to parse a binary expression.

### parse\_unary($text)

Method to parse a unary expression.

### parse\_term($text)

Method to parse a single term in a logical expression.

## AUTHOR

Andy Wardley \<http://wardley.org\>

## COPYRIGHT

Copyright (C) 2007-2009 Andy Wardley.  All Rights Reserved.

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