Your own types

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

subtype 'EvenNumber'
  => as 'Int'
  => where { $_ % 2 == 0 };
  => message { "$_ is not an even number" };

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 ); # failed: "7 is not an even number"