http://qs1969.pair.com?node_id=1194603


in reply to Converting a text into lowercase but not the word with all CAPS letters.

This is one of those cases where for readability sake, I would separate the split logic from the case logic. This isn't going to win any perl golf competitions but future maintainers will not try to hunt you down!

#!/usr/bin/env perl use strict; use warnings; my $input = "I am a GIRL"; my $output = []; # split input by non-words ... if you need to keep non-word # characters then you'll need a different regex foreach my $word ( split( /\W+/, $input ) ) { # if the word is all upper case and it's not a single letter if( $word =~ /^\p{Uppercase}+$/ && length( $word ) > 1 ) { push( @$output, $word ); } else { push( @$output, lc $word ); } } print join( ' ', @$output ), "\n";

-derby

update: Fix regex from /\p{Lu}+/ to /^\p{Uppercase}+$/