⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch03_10.htm

📁 编程珍珠,里面很多好用的代码,大家可以参考学习呵呵,
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><head><title>Named Unary and File Test Operators (Programming Perl)</title><!-- STYLESHEET --><link rel="stylesheet" type="text/css" href="../style/style1.css"><!-- METADATA --><!--Dublin Core Metadata--><meta name="DC.Creator" content=""><meta name="DC.Date" content=""><meta name="DC.Format" content="text/xml" scheme="MIME"><meta name="DC.Generator" content="XSLT stylesheet, xt by James Clark"><meta name="DC.Identifier" content=""><meta name="DC.Language" content="en-US"><meta name="DC.Publisher" content="O'Reilly &amp; Associates, Inc."><meta name="DC.Source" content="" scheme="ISBN"><meta name="DC.Subject.Keyword" content=""><meta name="DC.Title" content="Named Unary and File Test Operators"><meta name="DC.Type" content="Text.Monograph"></head><body><!-- START OF BODY --><!-- TOP BANNER --><img src="gifs/smbanner.gif" usemap="#banner-map" border="0" alt="Book Home"><map name="banner-map"><AREA SHAPE="RECT" COORDS="0,0,466,71" HREF="index.htm" ALT="Programming Perl"><AREA SHAPE="RECT" COORDS="467,0,514,18" HREF="jobjects/fsearch.htm" ALT="Search this book"></map><!-- TOP NAV BAR --><div class="navbar"><table width="515" border="0"><tr><td align="left" valign="top" width="172"><a href="ch03_09.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0"></a></td><td align="center" valign="top" width="171"><a href="ch03_01.htm">Chapter 3: Unary and Binary Operators</a></td><td align="right" valign="top" width="172"><a href="ch03_11.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0"></a></td></tr></table></div><hr width="515" align="left"><!-- SECTION BODY --><h2 class="sect1">3.10. Named Unary and File Test Operators</h2><p><a name="INDEX-871"></a><a name="INDEX-872"></a><a name="INDEX-873"></a> Some of the "functions" described in<a href="ch29_01.htm">Chapter 29, "Functions"</a> are really unaryoperators. <a href="ch03_10.htm#perl3-tab-uniops">Table 3-2</a> lists all the namedunary operators.<a name="INDEX-874"></a><a name="INDEX-875"></a></p><a name="perl3-tab-uniops"></a><h4 class="objtitle">Table 3.2. Named Unary Operators</h4><table border="1"><tr><td><tt class="literal">-</tt><em class="replaceable">X</em> (file tests)</td><td><tt class="literal">gethostbyname</tt></td><td><tt class="literal">localtime</tt></td><td><tt class="literal">return</tt></td></tr><tr><td><tt class="literal">alarm</tt></td><td><tt class="literal">getnetbyname</tt></td><td><tt class="literal">lock</tt></td><td><tt class="literal">rmdir</tt></td></tr><tr><td><tt class="literal">caller</tt></td><td><tt class="literal">getpgrp</tt></td><td><tt class="literal">log</tt></td><td><tt class="literal">scalar</tt></td></tr><tr><td><tt class="literal">chdir</tt></td><td><tt class="literal">getprotobyname</tt></td><td><tt class="literal">lstat</tt></td><td><tt class="literal">sin</tt></td></tr><tr><td><tt class="literal">chroot</tt></td><td><tt class="literal">glob</tt></td><td><tt class="literal">my</tt></td><td><tt class="literal">sleep</tt></td></tr><tr><td><tt class="literal">cos</tt></td><td><tt class="literal">gmtime</tt></td><td><tt class="literal">oct</tt></td><td><tt class="literal">sqrt</tt></td></tr><tr><td><tt class="literal">defined</tt></td><td><tt class="literal">goto</tt></td><td><tt class="literal">ord</tt></td><td><tt class="literal">srand</tt></td></tr><tr><td><tt class="literal">delete</tt></td><td><tt class="literal">hex</tt></td><td><tt class="literal">quotemeta</tt></td><td><tt class="literal">stat</tt></td></tr><tr><td><tt class="literal">do</tt></td><td><tt class="literal">int</tt></td><td><tt class="literal">rand</tt></td><td><tt class="literal">uc</tt></td></tr><tr><td><tt class="literal">eval</tt></td><td><tt class="literal">lc</tt></td><td><tt class="literal">readlink</tt></td><td><tt class="literal">ucfirst</tt></td></tr><tr><td><tt class="literal">exists</tt></td><td><tt class="literal">lcfirst</tt></td><td><tt class="literal">ref</tt></td><td><tt class="literal">umask</tt></td></tr><tr><td><tt class="literal">exit</tt></td><td><tt class="literal">length</tt></td><td><tt class="literal">require</tt></td><td><tt class="literal">undef</tt></td></tr></table><p><a name="INDEX-876"></a>Unary operators have a higher precedence than some of the binary operators.  For example:<blockquote><pre class="programlisting">sleep 4 | 3;</pre></blockquote>does not sleep for 7 seconds; it sleeps for 4 seconds and then takesthe return value of <tt class="literal">sleep</tt> (typically zero) and bitwise ORs that with 3, as ifthe expression were parenthesized as:<blockquote><pre class="programlisting">(sleep 4) | 3;</pre></blockquote>Compare this with:<blockquote><pre class="programlisting">print 4 | 3;</pre></blockquote>which <em class="emphasis">does</em> take the value of 4 ORed with 3 before printing it (7 inthis case), as if it were written:<blockquote><pre class="programlisting">print (4 | 3);</pre></blockquote>This is because <tt class="literal">print</tt> is a list operator, not a simple unaryoperator.  Once you've learned which operators are list operators,you'll have no trouble telling unary operators and list operators apart.  When in doubt, you canalways use parentheses to turn a named unary operator into a function.Remember, if it looks like a function, it is a function.<a name="INDEX-877"></a><a name="INDEX-878"></a></p><p><a name="INDEX-879"></a><a name="INDEX-880"></a><a name="INDEX-881"></a><a name="INDEX-882"></a><a name="INDEX-883"></a><a name="INDEX-884"></a><a name="INDEX-885"></a><a name="INDEX-886"></a> Another funny thing about named unary operatorsis that many of them default to <tt class="literal">$_</tt> if you don'tsupply an argument.  However, if you omit the argument but the tokenfollowing the named unary operator looks like it might be the start ofan argument, Perl will get confused because it's expecting a term.Whenever the Perl tokener gets to one of the characters listed in<a href="ch03_10.htm#perl3-tab-charopterm">Table 3-3</a>, the tokener returns differenttoken types depending on whether it expects a term or operator.<a name="INDEX-887"></a></p><a name="perl3-tab-charopterm"></a><h4 class="objtitle">Table 3.3. Ambiguous Characters</h4><table border="1"><tr><th>Character</th><th>Operator</th><th>Term</th></tr><tr><td><tt class="literal">+</tt></td><td>Addition</td><td>Unary plus</td></tr><tr><td><tt class="literal">-</tt></td><td>Subtraction</td><td>Unary minus</td></tr><tr><td><tt class="literal">*</tt></td><td>Multiplication</td><td><tt class="literal">*typeglob</tt></td></tr><tr><td><tt class="literal">/</tt></td><td>Division</td><td><tt class="literal">/pattern/</tt></td></tr><tr><td><tt class="literal">&lt;</tt></td><td>Less than, left shift</td><td><tt class="literal"> &lt;HANDLE&gt;, &lt;&lt;END</tt></td></tr><tr><td><tt class="literal">.</tt></td><td>Concatenation</td><td><tt class="literal">.3333</tt></td></tr><tr><td><tt class="literal">?</tt></td><td><tt class="literal">?:</tt></td><td><tt class="literal">?pattern?</tt></td></tr><tr><td><tt class="literal">%</tt></td><td>Modulo</td><td><tt class="literal">%assoc</tt></td></tr><tr><td><tt class="literal">&amp;</tt></td><td><tt class="literal">&amp;, &amp;&amp;</tt></td><td><tt class="literal">&amp;subroutine</tt></td></tr></table><p>So a typical boo-boo is:<blockquote><pre class="programlisting">next if length &lt; 80;</pre></blockquote>in which the <tt class="literal"> &lt;</tt>  looks to the parser like the beginning of the<tt class="literal">&lt;&gt;</tt> input symbol (a term) instead of the "less than" (anoperator) you were thinking of.  There's really no way to fix this andstill keep Perl pathologically eclectic.  If you're so incredibly lazythat you cannot bring yourself to type the two characters <tt class="literal">$_</tt>, thenuse one of these instead:<blockquote><pre class="programlisting">next if length() &lt; 80;next if (length) &lt; 80;next if 80 &gt; length;next unless length &gt;= 80;</pre></blockquote><a name="INDEX-888"></a><a name="INDEX-889"></a><a name="INDEX-890"></a><a name="INDEX-891"></a><a name="INDEX-892"></a><a name="INDEX-893"></a><a name="INDEX-894"></a><a name="INDEX-895"></a><a name="INDEX-896"></a><a name="INDEX-897"></a><a name="INDEX-898"></a><a name="INDEX-899"></a><a name="INDEX-900"></a><a name="INDEX-901"></a><a name="INDEX-902"></a><a name="INDEX-903"></a><a name="INDEX-904"></a><a name="INDEX-905"></a><a name="INDEX-906"></a><a name="INDEX-907"></a><a name="INDEX-908"></a><a name="INDEX-909"></a><a name="INDEX-910"></a><a name="INDEX-911"></a><a name="INDEX-912"></a><a name="INDEX-913"></a><a name="INDEX-914"></a>When a term is expected, a minus sign followedby a single letter will always be interpreted as a <em class="emphasis">filetest</em> operator. A file test operator is a unary operatorthat takes one argument, either a filename or a filehandle, and teststhe associated file to see whether something is true about it.  If theargument is omitted, it tests <tt class="literal">$_</tt>, except for<tt class="literal">-t</tt>, which tests <tt class="literal">STDIN</tt>.  Unless

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -