Pure Programmer
Blue Matrix


Cluster Map

Enumerations

L1

This page is under construction. Please come back later.

The enum construct is not a built-in part of Perl. You will need to install the CPAN module Class::Enum to use it.
$ sudo CPAN install Class::Enum
Enums1.pl
#!/usr/bin/env perl
use utf8;
use Utils;
use strict;
use warnings;

package CompassPoint {
use Class::Enum qw(
	NORTH EAST SOUTH WEST
);
}

sub CompassPointToString {
	my ($c) = @_;
	my $result = "";
	if ($c == CompassPoint::NORTH) {
		$result = "North";
	} elsif ($c == CompassPoint::EAST) {
		$result = "East";
	} elsif ($c == CompassPoint::SOUTH) {
		$result = "South";
	} elsif ($c == CompassPoint::WEST) {
		$result = "West";
	}
	return $result;
}

sub turnRight {
	my ($c) = @_;
	if ($c == CompassPoint::NORTH) {
		return CompassPoint::EAST;
	} elsif ($c == CompassPoint::EAST) {
		return CompassPoint::SOUTH;
	} elsif ($c == CompassPoint::SOUTH) {
		return CompassPoint::WEST;
	} else {
		return CompassPoint::NORTH;
	}
}

MAIN:
{
	binmode(STDOUT, ":utf8");
	binmode(STDERR, ":utf8");
	binmode(STDIN, ":utf8");
	my $cp1 = CompassPoint::NORTH;
	print "cp1: ", Utils::enumToString($cp1), "\n";
	print "SOUTH: ", CompassPointToString(CompassPoint::SOUTH), "\n";
	print "turnRight(cp1): ", CompassPointToString(turnRight($cp1)), "\n";
	my $cp2 = CompassPoint::EAST;
	if ($cp1 == $cp2) {
		print "cp1 == cp2\n";
	} else {
		print "cp1 != cp2\n";
	}
	$cp1 = $cp2;
	if ($cp1 == $cp2) {
		print "cp1 == cp2\n";
	} else {
		print "cp1 != cp2\n";
	}
}

Output
$ perl Enums1.pl cp1: NORTH SOUTH: South turnRight(cp1): East cp1 != cp2 cp1 == cp2
Enums2.pl
#!/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 combineColors {
	my ($c1, $c2) = @_;
	my $i1 = $c1->ordinal;
	my $i2 = $c2->ordinal;
	my $result = Utils::bitwiseOr32($i1, $i2);
	my $returnColor = Color->from_ordinal($result);
	return $returnColor;
}

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(combineColors($c1, Color::RED)), "\n";
	my $c2 = Color::GREEN;
	print "combineColors(c1, c2): ", Utils::enumToString(combineColors($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";
}

Output
$ perl Enums2.pl Use of uninitialized value in print at Enums2.pl line 50. c1: BLUE RED: RED combineColors(c1, RED): MAGENTA combineColors(c1, c2): CYAN c1 != c2 c1 == c2 bad:
perl

Questions

Projects

More ★'s indicate higher difficulty level.

References