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

Thanks for following up!

Use case: I am writing a build system (why not? :D ) that runs several phases of processing in order. I need to:

I am using string phase names rather than phase numbers because I don't want the user to have to remember the numbers.

Replies are listed 'Best First'.
Re^3: Module for sets of strings, ordered, case-insensitive?
by GrandFather (Saint) on Dec 27, 2020 at 00:53 UTC

    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
      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