📄 ch01_10.htm
字号:
<HTML><HEAD><TITLE>Recipe 1.9. Controlling Case (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen & Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:29:06Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch01_01.htm"TITLE="1. Strings"><LINKREL="prev"HREF="ch01_09.htm"TITLE="1.8. Expanding Variables in User Input"><LINKREL="next"HREF="ch01_11.htm"TITLE="1.10. Interpolating Functions and Expressions Within Strings"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch01_09.htm"TITLE="1.8. Expanding Variables in User Input"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 1.8. Expanding Variables in User Input"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch01_01.htm"TITLE="1. Strings"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch01_11.htm"TITLE="1.10. Interpolating Functions and Expressions Within Strings"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 1.10. Interpolating Functions and Expressions Within Strings"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch01-32726">1.9. Controlling Case</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch01-pgfId-929">Problem <ACLASS="indexterm"NAME="ch01-idx-1000010257-0"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-1"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-2"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-3"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-4"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-5"></A><ACLASS="indexterm"NAME="ch01-idx-1000010257-6"></A></A></H3><PCLASS="para">A string in uppercase needs converting to lowercase, or vice versa.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch01-pgfId-935">Solution</A></H3><PCLASS="para">Use the <CODECLASS="literal">lc</CODE><ACLASS="indexterm"NAME="ch01-idx-1000010267-0"></A><ACLASS="indexterm"NAME="ch01-idx-1000010267-1"></A> and <CODECLASS="literal">uc</CODE> functions or the <CODECLASS="literal">\L</CODE> and <CODECLASS="literal">\U</CODE><ACLASS="indexterm"NAME="ch01-idx-1000010272-0"></A><ACLASS="indexterm"NAME="ch01-idx-1000010272-1"></A> string escapes.</P><PRECLASS="programlisting">use locale; # needed in 5.004 or above$big = uc($little); # "bo peep" -> "BO PEEP"$little = lc($big); # "JOHN" -> "john"$big = "\U$little"; # "bo peep" -> "BO PEEP"$little = "\L$big"; # "JOHN" -> "john"</PRE><PCLASS="para">To alter just one character, use the <CODECLASS="literal">lcfirst</CODE><ACLASS="indexterm"NAME="ch01-idx-1000010268-0"></A><ACLASS="indexterm"NAME="ch01-idx-1000010268-1"></A><ACLASS="indexterm"NAME="ch01-idx-1000010268-2"></A><ACLASS="indexterm"NAME="ch01-idx-1000010268-3"></A> and <CODECLASS="literal">ucfirst</CODE> functions or the <CODECLASS="literal">\l</CODE> and <CODECLASS="literal">\u</CODE> string escapes.</P><PRECLASS="programlisting">$big = "\u$little"; # "bo" -> "Bo"$little = "\l$big"; # "BoPeep" -> "boPeep" </PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch01-pgfId-955">Discussion</A></H3><PCLASS="para">The functions and string escapes look different, but both do the same thing. You can set the case of either the first character or the whole string. You can even do both at once to force uppercase on initial characters and lowercase on the rest.</P><PCLASS="para">The <CODECLASS="literal">use</CODE><ACLASS="indexterm"NAME="ch01-idx-1000010269-0"></A> <CODECLASS="literal">locale</CODE> directive tells Perl's case-conversion functions and pattern matching engine to respect your language environment, allowing for characters with diacritical marks, and so on. A common mistake is to use <CODECLASS="literal">tr///</CODE><ACLASS="indexterm"NAME="ch01-idx-1000010270-0"></A> to convert case. (We're aware that the old Camel book recommended <CODECLASS="literal">tr/A-Z/a-z/</CODE>. In our defense, that was the only way to do it back then.) This won't work in all situations because when you say <CODECLASS="literal">tr/A-Z/a-z/</CODE> you have omitted all characters with umlauts, accent marks, cedillas, and other diacritics used in dozens of languages, including English. The <CODECLASS="literal">uc</CODE> and <CODECLASS="literal">\U</CODE> case-changing commands understand these characters and convert them properly, at least when you've said <CODECLASS="literal">use</CODE> <CODECLASS="literal">locale</CODE>. (An exception is that in German, the uppercase form of <CODECLASS="literal">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -