#!/usr/bin/perl -l use strict; # https://perlmonks.org/?node_id=11125762 use warnings; my $set = Some::Module->new(qw(oops foo bar bat)); print $set->contains('foo'); # true print $set->contains('FOO'); # true print $set->contains('Ops'); # false print $set->after('foo'); # 'bar' print $set->is_last('bar'); # false print $set->is_last('BAT'); # true print $set->is_last('bat'); # true package Some::Module; sub new { my $self = shift; bless [ @_ ], ref $self || $self; } sub contains { my ($self, $item) = @_; scalar grep /^\Q$item\E\z/i, @$self; } sub after { my ($self, $item, %hash) = @_; @hash{map lc, @$self} = @$self[1..$#$self]; $hash{lc $item}; } sub is_last { my ($self, $item) = @_; @$self ? $self->[-1] =~ /^\Q$item\E\z/i : 0; } #### 1 1 0 bar 1 1