---
name: "MooseX::App::Plugin::MutexGroup"
section: "3pm"
platform: "linux"
package: "libmoosex-app-perl"
version: "1.43-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MooseX::App::Plugin::MutexGroup"
---

# MooseX::App::Plugin::MutexGroup(3pm)

Adds mutually exclusive options

## NAME

MooseX::App::Plugin::MutexGroup - Adds mutually exclusive options

## SYNOPSIS

In your base class:

```
 package MyApp;
 use MooseX::App qw(MutexGroup);

 option 'UseAmmonia' => (
   is         => 'ro',
   isa        => 'Bool',
   mutexgroup => 'NonMixableCleaningChemicals',
 );

 option 'UseChlorine' => (
   is         => 'ro',
   isa        => 'Bool',
   mutexgroup => 'NonMixableCleaningChemicals'
 );
```

In your script:

```
 #!/usr/bin/env perl

 use strict;
 use warnings;

 use MyApp;

 MyApp->new_with_options( UseAmmonia => 1, UseChlorine => 1 );
 # generates Error
 # More than one attribute from mutexgroup NonMixableCleaningChemicals('UseAmmonia','UseChlorine') *cannot* be specified

 MyApp->new_with_options();
 # generates Error
 # One attribute from mutexgroup NonMixableCleaningChemicals('UseAmmonia','UseChlorine') *must* be specified

 MyApp->new_with_options( UseAmmonia => 1 );
 # generates no errors

 MyApp->new_with_options( UseChlorine => 1 );
 # generates no errors
```

## DESCRIPTION

This plugin adds mutually exclusive options to your application. In the current implementation, all defined MutexGroups \*must\* have exactly one initialized option. This means that there is an implicit requiredness of one option from each MutexGroup.
