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";
update: Fix regex from /\p{Lu}+/ to /^\p{Uppercase}+$/
In reply to Re: Converting a text into lowercase but not the word with all CAPS letters.
by derby
in thread Converting a text into lowercase but not the word with all CAPS letters.
by pdahal
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |