Your own types

package Cable::Ethernet;
use Moose;
use Moose::Util::TypeConstraints;

subtype EvenNumber
  => as Int
  => where { $_ % 2 == 0 };

has 'wire_count' => ( # Ethernet cables only have pairs of wires
    is  => 'ro',
    isa => 'EvenNumber',
);

Cable::Ethernet->new( wire_count => 8 ); # OK
Cable::Ethernet->new( wire_count => 7 ); # fails "EvenNumber" with "7"