From Bugzilla Helper: User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.5) Gecko/20011012 Description of problem: The default locale with Red Hat, in 8.0 and 7.2 (perhaps others), appears to be en_US. Not the old C locale, anyway. In this locale, file glob patterns like [A-Z] match most lower case letters as well as the upper case letters! Setting LC_COLLATE=C is a workaround. Version-Release number of selected component (if applicable): How reproducible: Always Steps to Reproduce: 1.mkdir c; cd c 2.> a; > b 3.echo [A-Z] Actual Results: Output from echo: b Expected Results: Output should have been [A-Z], since there should have been no match. If the odd new collation sequence rules for en_US were in place, so that [A-Z] also matches lower case, then expected result would have been "a b" Just getting "b" is completely broken. This has been confirmed under RH 8.0 and 7.2. I'm unsure whether this is a bug in glibc or bash. Additional info: I think it's also unfortunate that the dramatic change from a case- sensitive to a case-insensitive default locale was not more widely announced. That change is likely to break *many* existing shell scripts. The above bug is likely to break even more.
This is not a bug, the bug was when regex weren't doing this. In en_US collation, a comes before A which comes before b before B etc. If your script depends on C collation, you have to say so.
I agree. The change could have been better publicised though. Below are some consequences for Red Hat itself. I set LC_COLLATE=C and then in /usr/bin did this: grep A-Z `file * 2> /dev/null | grep text | sed 's/:.*//'` to find some examples of (Red Hat?) scripts in /usr/bin that should therefore be changed to use expressions like [:upper:]. These are listed below. The man page for regex(3) is also wrong now: [4] [set] Matches one of the characters in the set. If the first character in the set is ^, it matches a character NOT in the set. A shorthand S-E is used to specify a set of characters S up to E, inclusive. The spe- cial characters ] and - have no special meaning if they appear as the first chars in the set. examples: match: [a-z] any lowercase alpha [^]-] any char except ] and - [^A-Z] any char except uppercase alpha [a-zA-Z0-9] any alphanumeric Let me know if you'd prefer me to submit a fresh bug report, for these consequences of the correct implementation of collation semantics. aclocal: if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)/) aclocal: if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)/) as86_encap: [A-Za-z_]* ) PREFIX="$1" audiofile-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; autoconf: sed -n "s/^[^#]*\\(${pattern}[_A-Za-z0-9]*\\).*/\\1/p" $tmpout | autoheader: sym="`echo ${func} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" autoheader: sym="`echo ${header} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" autoheader: sym="`echo ${lib} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" automake:$RULE_PATTERN = "^([\$a-zA-Z_.][-.a-zA-Z0-9_(){}/\$]*) *:([^=].*|)\$"; automake:$SUFFIX_RULE_PATTERN = "^\\.([a-zA-Z]+)\\.([a-zA-Z]+)\$"; automake:$MACRO_PATTERN = "^([A-Za-z][A-Za-z0-9_]*)[ \t]*([:+]?)=[ \t]*(.*)\$"; automake:$GNITS_VERSION_PATTERN = '[0-9]+\.[0-9]+([a-z]|\.[0-9]+)?(-[A-Za-z0-9]+)?'; automake:$IF_PATTERN = "^if[ \t]+\([A-Za-z][A-Za-z0-9_]*\)[ \t]*\(#.*\)?\$"; automake: if $VERSION !~ /(\d+)\.(\d+)([a-z]?)-?([A-Za-z0-9]+)?/; automake: elsif (/([0-9]+)\.([0-9]+)([a-z]?)(-[A-Za-z0-9]+)?/) automake: ($xname = $name) =~ tr/A-Za-z0-9_/_/c; automake: ($xname = $one_file) =~ tr/A-Za-z0-9_/_/c; automake: ($xlib = $onelib) =~ tr/A-Za-z0-9_/_/c; automake: ($xlib = $onelib) =~ tr/A-Za-z0-9_/_/c; automake: ($canonical = $infobase) =~ tr/A-Za-z0-9_/_/c; automake: elsif ($one_dep =~ /^\// || $one_dep =~ /^[A-Za-z]:\\/) autoscan: while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { autoscan: while (s/\W([a-zA-Z_]\w*)\W/ /) { autoscan: while (s/\W([a-zA-Z_]\w*)\s*=/ /) { autoscan: while (s/\W-l([a-zA-Z_]\w*)\W/ /) { autoscan: while (s/\W([a-zA-Z_][\w\+\.-]*)\W/ /) { autoscan: while (s/\W([a-zA-Z_]\w*)\W/ /) { c2ph:eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; c2ph:eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; composeglyphs: if(/^Start([a-zA-Z0-9]*).*/) { composeglyphs: elsif(/^N *([a-zA-Z0-9\.]*)/) { $characterName=$1 ; } composeglyphs: if(/^CC *([a-zA-Z0-9\.]*) *([0-9]*)/) { composeglyphs: elsif(/^PCC *([a-zA-Z0-9.]*) *(-?[0-9]*) *(-?[0-9]*)/) { composeglyphs:# elsif (/^ *([-_$a-zA-Z0-9]*) *([-_$a-zA-Z0-9]*)* ([0-9]*) *$/) { curl-config: -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; cvsbug:/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;; cvsbug:/^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;; cvsbug:/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;; cvsbug:/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;; cvsbug:/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;; cvsbug:/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;; dsirc: $a =~ tr/A-Z/a-z/; dsirc: $b =~ tr/A-Z/a-z/; dsirc: $t =~ tr/A-Z/a-z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $what =~ tr/a-z/A-Z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $var =~ tr/a-z/A-Z/; dsirc: $val =~ tr/A-Z/a-z/; dsirc: $val =~ tr/A-Z/a-z/; dsirc: $ctcp =~ tr/a-z/A-Z/; dsirc: $cmd =~ tr/a-z/A-Z/; dsirc: $cmd =~ tr/a-z/A-Z/; dsirc: $a =~ tr/a-z/A-Z/; dsirc: $newarg =~ tr/a-z/A-Z/; dsirc: $s =~ tr/a-z/A-Z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $newarg =~ tr/A-Z/a-z/; dsirc: $newarg =~ tr/A-Z/a-z/; dsirc: $newarg =~ tr/a-z/A-Z/; dsirc: $cmd =~ tr/a-z/A-Z/; dsirc: $cmd =~ tr/A-Z/a-z/; dsirc: $var =~ tr/a-z/A-Z/; dsirc: $type =~ tr/A-Z/a-z/; dsirc: $type =~ tr/A-Z/a-z/; dsirc: $chnl =~ tr/A-Z/a-z/; dsirc: $c =~ tr/A-Z/a-z/; dsirc: $c =~ tr/A-Z/a-z/; dsirc: $n =~ tr/A-Z/a-z/; dsirc: $cmd =~ tr/a-z/A-Z/; dsirc: $channel =~ tr/A-Z/a-z/; dsirc: $newarg =~ tr/A-Z/a-z/; esd-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; fax: case "$1" in [A-Z]*=*) eval $1 ; shift ;; *) break ;; esac fax: [A-Za-z]*) fixsgml:pat = re.compile("(<\w*)([A-Z])") fixsgml:pat = re.compile("(</\w*)([A-Z])") fontimport: -e 's@.*mode=\([a-zA-Z0-9_]*\).*@\1@; q' freetype-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; gconf-config-1: -*=*) af_optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; gdk-pixbuf-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; gimptool: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; glib-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; glibcbug:/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;; glibcbug:/^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;; glibcbug:/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;; glibcbug:/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;; glibcbug:/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;; glibcbug:/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;; gnome-bug:/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;; gnome-bug:/^X-Gnome-CC:/s;<[ A-Za-z0-9]+>;; gnome-bug:/^>Gnome-Libs-Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;; gnome-bug:/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;; gnome-bug:/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;; gnome-bug:/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;; gnome-bug:/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;; gnome-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; gnome-config: up_name=`echo $1 | tr '[a-z]' '[A-Z]'` gnome-convert: s#([-a-zA-Z._0-9]+\@[-a-zA-Z._0-9]+)#<A HREF="mailto:$1">$1</A>#g; gnome-convert: s:>+(\S+\@[-a-zA-Z._0-9]*):<A HREF=\"mailto\:$1\">$1</A>:; gnome-convert: s#(\S+\@[-a-zA-Z._0-9]*)#<A HREF="mailto:$1">$1</A>#; gnome-convert: s#([a-zA-Z]*\.[a-zA-Z.]*)#<A HREF="$1">$1</A>#g; gnome-doc: $id =~ s/[^A-Za-z0-9]/-/g; gnome-doc: $id =~ s/[^A-Za-z0-9]/-/g; gnome-doc: if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || gnome-doc: $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || gnome-doc: $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || gnome-doc: $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || gnome-doc: $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/) { gnome-upgrade.py: /bin/mv ~/.gtkrc ~/.gtkrc.PREUPGRADE && cat ~/.gtkrc.PREUPGRADE | sed -e 's/themes\/[a-zA-Z0-9]*/themes\/Raleigh/g' > ~/.gtkrc gnome-upgrade.py: session_re = re.compile ('^ *(\[[A-Za-z0-9]+\]) *$\n', re.MULTILINE | re.DOTALL) gnome-upgrade.py: session_name_re = re.compile ('\[([A-Za-z0-9]+)\]') gtk-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; h2ph: } elsif(/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?\{/) { h2ph: /^\s?(typedef\s?)?enum\s?([a-zA-Z_]\w*)?\s?\{(.*)\}\s?([a-zA-Z_]\w*)?\s?;/; h2ph: my ($enum_name, $enum_value) = $enum =~ /^([a-zA-Z_]\w*)(=.+)?$/; h2ph: s/^([_A-Z]\w*(\[[^\]]+\])?((\.|->)[_A-Z]\w*(\[[^\]]+\])?)+)//i && do { h2ph: s/^([_a-zA-Z]\w*)// && do { ifnames: if (sym ~ /^[A-Za-z_]/) { ifnames: sub(/[^A-Za-z_0-9].*/, "", $0) ifnames: for (i = split($0, field, /[^A-Za-z_0-9]+/); 1 <= i; i--) { imlib-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; latex2html:unless ($ISO_LANGUAGE =~ /^[A-Z.]+$/) { latex2html:if($ACCENT_IMAGES && $ACCENT_IMAGES !~ /^[a-zA-Z,]+$/) { latex2html: s/\\verb()(\;SPM\w+\;|[^a-zA-Z*\s])/"<verb$1".++$id.">$2"/e || latex2html: s/\\newedcommand(<<\d+>>)([A-Za-z]+|[^A-Za-z])\1(\[\d+\])?(\[[^]]*\])?(<<\d+>>)[\w\W\n]*\5($comment_mark\d*)?//gm; latex2html: } elsif ($contents =~ /^\s*\\([a-zA-Z]+)\b/s) { latex2html: if ($contents =~/;SPM([a-zA-Z]+);/) { $has_special_chars=1 }; latex2html: /\\((boldsymbol|bm)|(math|text)(bf|rm|it|tt)|times|[{}@#^_])(\b|[^A-Za-z]|$)/)) { latex2html: $mathcontents =~ s/\^(\\[a-zA-Z]+|.)/<SUP>$1<\/SUP>/g; latex2html: $mathcontents =~ s/_(\\[a-zA-Z]+|.)/<SUB>$1<\/SUB>/g; latex2html: $mathcontents =~ s/(^|\s|[,;:'\?\.\[\]\(\)\+\-\=\!>]|[^\\<]\/|\d)(<(I|TT|B)>)?([a-zA-Z]([a-zA-Z ]*[a-zA-Z])?)(<\/\3>)?/ latex2html: $mathcontents =~ s/\\times($|\b|[^A-Za-z])/ x $1/g; latex2html: $mathcontents =~ s/\\times($|\b|[^A-Za-z])/ x $1/g; latex2html: $mathcontents =~ s/;<I>SPM([a-zA-Z]+)<\/I>;/;SPM$1;/go; latex2html: elsif ( $fontinfo =~ /[a-zA-Z]+(\d+)\b/ ) { $size = $1.'pt' } latex2html: elsif ( $fontinfo =~ /[a-zA-Z]+(\d+)\b/ ) { $size = $1.'pt' } latex2html: elsif (/latex2htmlLength ([a-zA-Z]+)=(\-?[\d\.]+)pt/) { latex2html: $alt =~ s/^(\\vbox\{)?\#[A-Za-z]*\s*//; latex2html: $alt =~ s/\n?\#[A-Za-z]*\s*\}?$//s; latex2html: $after =~ s/^\s*\\([a-zA-Z]+|.)/$nextcmd = $1;''/eo; latex2html: $after =~ s/^\s*\\([a-zA-Z]+|.)/$nextcmd = $1;''/eo; latex2html: $after =~ s/^\s*(\\[a-zA-Z]+|.)/$arg = $1;''/e; latex2html: if ($before=~/(^|[^\\])\\[a-zA-Z]+$/ && /^$/ && $after=~/^[a-zA-Z]/) || latex2html: ($before=~/(^|[^\\])\\[a-zA-Z]+$/ && /^[a-zA-Z]/); latex2html: if /(^|[^\\])\\[a-zA-Z]+$/ && $after=~/^[a-zA-Z]/; latex2html:# s/(^|,)\s*([a-zA-Z]+)\s*\=\s*"?([\#\%\w\d]+)"?\s*/$attributes{$2}="$3";''/eg; latex2html:# s/(^|,)\s*([a-zA-Z]+)\s*\=\s*(\"([^"]*)\"|\'([^\']*)\'|([#%\w\d]*))\s*/ latex2html:# s/(^|,)\s*([a-zA-Z]+)\s*\=\s*(\"([^"]*)\"|\'([^\']*)\'|([#%&@;:+-\/\w\d]*))\s*/ latex2html: s/(^|,)\s*([a-zA-Z]+)\s*\=\s*(\"([^"]*)\"|\'([^\']*)\'|([^<>,=\s]*))\s*/ latex2html: $KEY =~ tr/a-z/A-Z/; latex2html:# $atts =~ tr/A-Z/a-z/; latex2html:# $atts =~ tr/A-Z/a-z/; latex2html:# $atts =~ tr/A-Z/a-z/; latex2html: $KEY =~ tr/a-z/A-Z/; latex2html: $atts =~ tr/A-Z/a-z/; latex2html: $KEY =~ tr/a-z/A-Z/; latex2html: $KEY =~ tr/a-z/A-Z/; latex2html: $atts =~ tr/A-Z/a-z/; latex2html: $preamble =~ s/\\par([^A-Za-z]|$)/\n$1/g; latex2html: tr/A-Z/a-z/; latex2html: s/<\/(TT|[^PTH][A-Z]+)><\1>//g; latex2html: s/<([A-Z]+)[^>]*>\s*<\/\1>\s*//g; latex2html: s/^\s*(\\([a-zA-Z]+|.)|[&;]\w+;(#\w+;)?|.)/$tok=$1;''/e; latex2html: if (s/^\s*\\lq(\b|$|[^A-Za-z])/$1/) { latex2html: if ($cmd=~s/^\\([a-zA-Z]+)//s) { $cmd = $1 }; latex2html: $_[0] =~ s/\\item[\s\r]*(\b(\[(([^\[\]]|\[[^]]*\])*)\])?|[^a-zA-Z\s])/ latex2html:# grep (do {tr/a-z/A-Z/ unless /(^\\)|(tex2html)/}, @words); latex2html: my $padding = ($after =~ /^[a-zA-Z]/s)? ($cmd =~ /\W$/ ? '':' '):''; latex2html: if $use_label =~ (/<\/([A-Z]+)>($math_verbatim_rx.*)<\1>/); latex2html: return($text) unless ($text =~ /<\/([A-Z]+)>(\s*$math_verbatim_rx.*)(<\1( [^>]*)?>)/); latex2html: if $use_label =~ (/<\/([A-Z]+)>($math_verbatim_rx.*)<\1>/); latex2html: $number =~ tr/a-z/A-Z/; latex2html: if (!(s/^\s*\\if([a-zA-Z]+)//)) { latex2html: if (s/^\\([ij])([^a-zA-Z]|$)/$2/) { latex2html: while ($text =~ /(\\[a-zA-Z]+|[&;]SPM\w+;|<[^>]+>)+/m ) { latex2html: eval "\$next =~ tr/a-z$sclower/A-Z$scupper/"; latex2html: eval "\$next =~ tr/a-z$sclower/A-Z$scupper/"; latex2html: while ($text =~ /(\\[a-zA-Z]+|[&;]SPM\w+;)/ ) { latex2html: $next =~ tr /a-z/A-Z/ if ($next); latex2html: $text =~ tr /a-z/A-Z/ if ($text); latex2html: while ($text =~ /(\\[a-zA-Z]+|[&;]SPM\w+;)/ ) { latex2html: $next =~ tr /A-Z/a-z/ if ($next); latex2html: $text =~ tr /A-Z/a-z/ if ($text); latex2html: $_ =~ tr/A-Z/a-z/; latex2html: $letters = 'a-zA-Z'; latex2html:# $single_cmd_atletter_rx = "\\\\([a-zA-Z\\\@]+\\*?|[$cmd_delims]|\\\\)"; latex2html:# $single_cmd_atother_rx = "\\\\([a-zA-Z]+\\*?|[$cmd_delims]|\\\\)"; latex2html: $next_token_rx = "^[\\s%]*(\\\\[A-Za-z]+|\\\\[^a-zA-Z]|.)"; latex2html: # Eg. \\(\@|...|\+)|\\(abc|...|xyz)(([^a-zA-Z \t])|[ \t]+) libIDL-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libart-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libefs-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libglade-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libgtop-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libmikmod-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; libtool:global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" libtool: -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) ;; libtool: -L[A-Z][A-Z]*:*) libtool: [\\/]* | [A-Za-z]:[\\/]*) ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; libtool: [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) libtool: [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; libtool: [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; libtool: [\\/]* | [A-Za-z]:[\\/]*) ;; licensecheck: header=`head -30 $file| sed 's/ / /g;s/$/ /g' | tr -d -c ' A-Za-z.,/@1-9()'` lsdev: next if /^[ \t]*[A-Z]/; mailserver:set BARLC=(`echo "$FOO" | tr A-Z a-z`) mailshar: | tr '[A-Z]' '[a-z]'`" in mailstat: -e '/^ Folder/s/\/msg\.[-0-9A-Za-z_][-0-9A-Za-z_]* /\/ /' \ mailstat: -e '/^ Folder/s/\/new\/[-0-9A-Za-z_][-0-9A-Za-z_.,+:%@]* /\/ /' \ mailstat: -e '/^ Folder/s/\/msg\.[-0-9A-Za-z_][-0-9A-Za-z_]* /\/ /' \ mailstat: -e '/^ Folder/s/\/new\/[-0-9A-Za-z_][-0-9A-Za-z_.,+:%@]* /\/ /' \ mm-config: -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; oaf-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; orbit-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; pcre-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; pl2pm: @export = m/sub\s+([A-Za-z]\w*)/g; ppmshadow: $opt =~ tr/A-Z/a-z/; ps2epsi: -e '/^%%[A-Za-z][A-Za-z]*[^!-~]*$/d' -e '/^%%[A-Za-z][A-Za-z]*: /d' ${infile} pstruct:eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; pstruct:eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; qtdoc: fname=`echo $1 | tr '[A-Z]' '[a-z]'` remsync: $email =~ tr/A-Z/a-z/; remsync: $remote =~ tr/A-Z/a-z/; remsync: $here_email_received =~ tr/A-Z/a-z/; remsync: $remote_received =~ tr/A-Z/a-z/; remsync: $here_email =~ tr/A-Z/a-z/; remsync: $string =~ tr/A-Z/a-z/; remsync: tr/A-Z/a-z/; s2p: s/[^a-zA-Z0-9]/_/g; s2p: $label =~ s/[^a-zA-Z0-9]/_/g; s2p: substr($label,0,1) =~ y/a-z/A-Z/ s2p: s/ABCDEFGHIJKLMNOPQRSTUVWXYZ/A-Z/g; s2p: $delim = '' if $ch =~ /^[(){}A-Za-mo-z]$/; scrollkeeper-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; splain: $header =~ s/[A-Z]<(.*?)>/$1/g; splain: ( [A-Za-z]+ ) switchdesk-helper:DESKTOP=`echo $1 |tr a-z A-Z` sync-plan: $pilotname =~ s/[^A-Za-z0-9]+/_/g; texexec: { if (!/^[a-zA-Z\s]/oi) texi2html: $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); texi2html: $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); texi2html: $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; texi2html: if ($a =~ /^[A-Za-z]/) texi2html: if ($b =~ /^[A-Za-z]/) texi2html: elsif ($b =~ /^[A-Za-z]/) texi2html: if ($letter =~ /^[A-Za-z]/) texi2html: $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./; texi2html: $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; texi2html: $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /); texutil:# $copied =~ s/([\^\"\`\'\~\,])([a-zA-Z])/$ASCII{$1}/gio ; texutil:# $string =~ s/([\^\"\`\'\~\,])([a-zA-Z])/$2/gio ; texutil:# $string =~ s/\\[a-zA-Z]*| |\{|\}//gio ; texutil: $copied =~ s/([\^\"\`\'\~\,])([a-zA-Z])/$ASCII{$1}/gio ; texutil: $string =~ s/([\^\"\`\'\~\,])([a-zA-Z])/$2/gio ; texutil: $string =~ s/\\[a-zA-Z]*| |\{|\}//gio ; texutil: $Key =~ s/^([^a-zA-Z])/ $1/go ; unicode-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; winemaker: $name =~ tr/a-zA-Z0-9_/_/c; winemaker: if (($opt_lower == $OPT_LOWER_ALL and $dentry =~ /[A-Z]/) or winemaker: if ($filename =~ /^([a-zA-Z]:)?[\/]/ or $filename =~ /^[a-zA-Z]:[\/]?/) { xdelta-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; xml-config: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; xmlizer:pat = re.compile("(<\w*)([A-Z])") xmlizer:pat = re.compile("(</\w*)([A-Z])") Regards, luke