#!/usr/bin/env perl use utf8; use Utils; use strict; use warnings; package Color { use Class::Enum ( "RED" => { ordinal => 1 }, "GREEN" => { ordinal => 2 }, "YELLOW" => { ordinal => 3 }, "BLUE" => { ordinal => 4 }, "MAGENTA" => { ordinal => 5 }, "CYAN" => { ordinal => 6 } ); } sub combine_colors { my ($c1, $c2) = @_; my $i1 = $c1->ordinal; my $i2 = $c2->ordinal; my $RESULT = Utils::bitwiseOr32($i1, $i2); my $RETURN_COLOR = Color->from_ordinal($RESULT); return $RETURN_COLOR; } MAIN: { binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); binmode(STDIN, ":utf8"); my $c1 = Color::BLUE; print "c1: ", Utils::enumToString($c1), "\n"; print "RED: ", Utils::enumToString(Color::RED), "\n"; print "combineColors(c1, RED): ", Utils::enumToString(combine_colors($c1, Color::RED)), "\n"; my $c2 = Color::GREEN; print "combineColors(c1, c2): ", Utils::enumToString(combine_colors($c1, $c2)), "\n"; if ($c1 == $c2) { print "c1 == c2\n"; } else { print "c1 != c2\n"; } $c1 = $c2; if ($c1 == $c2) { print "c1 == c2\n"; } else { print "c1 != c2\n"; } my $BAD = Color->from_ordinal(7); print "bad: ", Utils::enumToString($BAD), "\n"; }