my @values = qw/ a ab. d ef def g|h /; my ($regex) = map { qr/$_/ } # 5. join '|', # 4. map {quotemeta} # 3. sort { length $b <=> length $a } # 2. @values; # 1. print "$regex\n"; # 6. #### (?^:ab\.|def|g\|h|ef|a|d) #### if ($input=~$regex) { print "It matches!\n"; } # or while ($input=~/($regex)/g) { print "Found string: $1\n"; } #### my %map = ( a=>1, ab=>23, cd=>45 ); # 1. my ($regex) = map { qr/$_/ } # 2. join '|', map {quotemeta} sort { length $b <=> length $a or $a cmp $b } # 3. keys %map; print "$regex\n"; # 4. # Now, use the regex my @strings = qw/ abcd aacd abaab /; # 5. for (@strings) { my $before = $_; s/($regex)/$map{$1}/g; # 6. print "$before -> $_\n"; # 7. } #### abcd -> 2345 aacd -> 1145 abaab -> 23123