ken@titan ~/tmp/pm_11155205_uni_char_class $ ls -l total 2 -rw-r--r-- 1 ken None 590 Oct 27 22:12 PolyUniCharClass.pm -rwxr-xr-x 1 ken None 404 Oct 27 22:13 uni_char_class.pl #### package PolyUniCharClass; use strict; use warnings; { my %char_class_despatch = ( InThaiHCons => \&InThaiHCons, InThaiLCons => \&InThaiLCons, ); sub list { my ($char_class) = @_; unless (exists $char_class_despatch{$char_class}) { warn "Char class '$char_class' doesn't exist!\n"; return []; } return [ map chr hex, @{$char_class_despatch{$char_class}->()} ]; } } sub InThaiHCons { return [qw{0E02 0E03 0E09}]; } sub InThaiLCons { return [qw{0E04 0E07 0E0A}]; } 1; #### #!/usr/bin/env perl use strict; use warnings; use open OUT => qw{:encoding(UTF-8) :std}; use lib '.'; # DEMO ONLY -- DON'T use in PRODUCTION! use PolyUniCharClass; print "InThaiHCons:\n"; print @{PolyUniCharClass::list('InThaiHCons')}, "\n"; print "InThaiLCons:\n"; print @{PolyUniCharClass::list('InThaiLCons')}, "\n"; print "InThaiMCons:\n"; print @{PolyUniCharClass::list('InThaiMCons')}, "\n";