in reply to Re^2: Module for sets of strings, ordered, case-insensitive?
in thread Module for sets of strings, ordered, case-insensitive?

Something like:

use warnings; use strict; package PhaseManager; sub new { my ($class, @phases) = @_; my %phaseHash = map {lc($phases[$_]) => lc($phases[$_ + 1] || '')} 0 .. $#phases; return bless \%phaseHash, $class; } sub Next { my ($self, $phase) = @_; die "Unknown phase '$phase'" if !exists $self->{lc $phase}; return $self->{lc $phase}; } package main; my $manager = PhaseManager->new (qw'first second last'); my @testPhases = qw'first Second LAST FUBAR'; for my $currPhase (@testPhases) { my $nextPhase = $manager->Next($currPhase) || '<No next phase>'; print "Phase '$currPhase' goes to '$nextPhase'\n"; }

Prints:

Phase 'first' goes to 'second' Phase 'Second' goes to 'last' Phase 'LAST' goes to '<No next phase>' Unknown phase 'FUBAR' at D:\Delme~~\PerlScratch\delme.pl line 17.
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Replies are listed 'Best First'.
Re^4: Module for sets of strings, ordered, case-insensitive?
by cxw (Scribe) on Jan 10, 2021 at 21:16 UTC
    I like this approach --- very clean. May I bundle it for CPAN? If so, standard Perl license OK? (I checked your userpage but didn't see a license statement.) Thanks!

      As far as I'm concerned this is in the public domain and can be used as you wish.

      Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond