Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: Module for sets of strings, ordered, case-insensitive?

by cxw (Scribe)
on Dec 27, 2020 at 00:32 UTC ( [id://11125766]=note: print w/replies, xml ) Need Help??


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!

  • The order is the order given in the constructor - qw(first second third ...).
  • "sufficiently trivial" --- that would explain why I couldn't find a module.

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

  • Move from one phase to its successor phase over the course of execution (therefore, $nextphase = $phases->after($thisphase); and
  • Map from a command-line parameter provided by the user to a phase, if the user wants to repeat a phase or skip ahead (therefore, case-insensitive lookup).

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11125766]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2024-04-25 17:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found