<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[我是程序员   -Shosh's Blog - perl学习]]></title>
<link>http://www.wscxy.com/shosh/</link>
<description><![CDATA[]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[shosh.zhu@qisda.com(shosh)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>我是程序员   -Shosh&#39;s Blog</title>
	<url>http://www.wscxy.com/shosh/images/logos.gif</url>
	<link>http://www.wscxy.com/shosh/</link>
	<description>我是程序员   -Shosh&#39;s Blog</description>
</image>

			<item>
			<link>http://www.wscxy.com/shosh/article.asp?id=53</link>
			<title><![CDATA[perl学习笔记1]]></title>
			<author>shosh.zhu@qisda.com(shosh)</author>
			<category><![CDATA[perl学习]]></category>
			<pubDate>Tue,16 Sep 2008 18:22:36 +0800</pubDate>
			<guid>http://www.wscxy.com/shosh/default.asp?id=53</guid>
		<description><![CDATA[<div>警告和诊断</div>
<div>文件第一行写</div>
<div>#! perl -w</div>
<div>或在代码中写</div>
<div>use warnings;</div>
<div>或</div>
<div>use diagnostics;</div>
<div>&nbsp;</div>
<div>整数的分隔</div>
<div>Perl 允许用下划线来分隔整数，因此 61_298_040_283_768 和 61298040283768 等价</div>
<div>&nbsp;</div>
<div>进制的表示</div>
<div>Perl 除了可以使用0x开头表示16进制，0开头表示8进制，还可以使用0b开头表示二进制哦，这是比其他语言或脚本更方便的地方哦。（十进制当然不用设么前缀了）。</div>
<div>&nbsp;</div>
<div>字符串</div>
<div>Perl 中字符串可以包含任意字符，意味着利用字符串(string)你可以创建，遍历，操作二进制数据,而利用别的方法可能遇到极大的困难。例如，你可以把要更新的图片或编译好的程序放入一个Perl 的字符串变量中，做完相应的修改后，再写回去。也就是说，Perl 可以很方便的操作二进制数据（想起FSO不能够读写二进制文件，改用 Perl 就有机会了）。</div>
<div>&nbsp;</div>
<div>和C，C++不同，Perl 中NUL 字符没有特殊的含义。Perl 能计算长度，不用靠null 来判断字符串是否结束。</div>
<div>&nbsp;</div>
<div>在C，C++中，字符串用双引号括起来，而单引号只能括单个字符。另人想起C语言中的经典试题：</div>
<div>
<div>
<ol style="border-right: gray 1px solid; padding-right: 2px; border-top: gray 1px solid; padding-left: 2px; padding-bottom: 2px; margin: 0px; border-left: gray 1px solid; color: #2f4f4f; word-break: break-all; padding-top: 2px; border-bottom: gray 1px solid; font-family: Courier New; list-style-type: decimal; background-color: #dcf5dc">
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">char&nbsp;a<font color="#800080"><b>[]</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#800080"><b>{</b></font><font color="#800000">'a'</font><font color="#4b0082">,</font>&nbsp;<font color="#800000">'b'</font><font color="#4b0082">,</font>&nbsp;<font color="#800000">'c'</font><font color="#800080"><b>}</b></font><font color="#4b0082">;</font></span></li>
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">char&nbsp;b<font color="#800080"><b>[]</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#800000">&quot;abc&quot;</font><font color="#4b0082">;</font></span></li>
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">sizeof<font color="#800080"><b>(</b></font>a<font color="#800080"><b>)</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#4b0082">?;</font></span></li>
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">sizeof<font color="#800080"><b>(</b></font>b<font color="#800080"><b>)</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#4b0082">?;</font></span></li>
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">strlen<font color="#800080"><b>(</b></font>a<font color="#800080"><b>)</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#4b0082">?;</font></span></li>
    <li style="padding-left: 6px; margin: 0px 0px 0px 50px; border-left: silver 2px ridge; line-height: 18px; background-color: #f5fffa"><span style="color: black">strlen<font color="#800080"><b>(</b></font>b<font color="#800080"><b>)</b></font>&nbsp;<font color="#4b0082">=</font>&nbsp;<font color="#4b0082">?;</font>&nbsp;</span></li>
</ol>
</div>
</div>
<div>Perl里单引号也可以引字符串，不过和双引号不同的是：里面的转义只有两种：\\转为\ 和 \' 转为 '</div>
<div>另外双引号字符串支持标量变量的内插，而单引号不支持。至于什么是字符串标量变量的内插，请看下面。</div>
<div>&nbsp;</div>
<div>当一个字符串由双引号括起来时，如果变量前没有反斜线，则变量会被其值内插。也就是说字符串中的标量变量将被其值替换。</div>
<div>如下面的代码将输出&quot;Hello,Shosh.&quot;.</div>
<div>$guest = &quot;Shosh&quot;;</div>
<div>print(&quot;Hello,$guest.&quot;);</div>
<div>而如果是C语言，往往需要printf或是sprintf等函数实现类似的效果。而javascript则需要使用+运算两字符串连接起来。</div>
<div>&nbsp;</div>
<div>说到字符串的连接，其实perl里也有连接的操作符，它就是英语中的句号&ldquo;.&rdquo;，它类似JavaScript中的&quot;+&quot;或VBScript中的&quot;&amp;&quot;. 在Perl中，下面的语句是正确的：</div>
<div>$! perl</div>
<div>$myString .= &quot;abc&quot;;</div>
<div>尽管$myString在使用前并没有初始化，但是它可以被用来进行字符串连接。没有初始化的$myString被认为是空的字符串。类似的，没有初始化的整数变量的值被认为是0（因为perl中的变量也是弱类型的，所以当变量被使用时才能确定其&ldquo;具体的类型&rdquo;）。</div>
<div>事实上，perl中没有初始化的变量的值是undef，可以使用函数defined($var)来判断。顺便多说一句，perl中的undef应该和javascript中的undfined类似的。</div>
<div>如下面的两段代码：</div>
<div>if (!defined($myString))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp; $myString .= &quot;12abc&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp; print($myString);<br />
}</div>
<div>代码一输出：12abc</div>
<div>if (!defined($myString))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp; $myString += &quot;12abc&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp; print($myString);<br />
}</div>
<div>代码二输出：12</div>
<div>&nbsp;</div>
<div>perl中另一个很优秀的很特殊的操作符是字符串重复操作符(string repetition operator)，由小写的字母x 表示。</div>
<div>比如 5 x&nbsp;6 等同于字符串&quot;555555&quot;; &quot;shosh&quot; x 3 等同于字符串 &quot;shoshshoshshosh&quot;;</div>
<div>举例来说明一下它的优势：</div>
<div>将&nbsp;1 这个数表示成 00000001，分别用javascript和perl来实现；</div>
<div>在js中，使用下面的代码：</div>
<div>new Array(8).join(&quot;0&quot;) + &quot;1&quot;;</div>
<div>而perl只需要：</div>
<div>0 x 7 . 1;</div>
<div>perl真是简便得难以想象，呵呵！</div>
<div>&nbsp;</div>
<div>在C中，两个字符串比较需要使用函数，但是在perl中则不需要（其实javascript也不需要），而是有专门的比较运算符的，见下表：（js中数字的和字符串的比较运算符是一样的，都是使用左边一栏的）<br />
比较关系&nbsp;&nbsp;&nbsp; &nbsp; 数字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串<br />
相等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eq<br />
不等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ne<br />
小于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lt<br />
大于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;gt<br />
小于或等于&nbsp;&nbsp; &lt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; le<br />
大于或等于&nbsp;&nbsp; &gt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ge</div>
<div>&nbsp;</div>
<div>流程控制</div>
<div>perl中也有if和while，基本和其他语言一样，但是不一样的是，{}对perl来说是必须的，哪怕{}中只有一句代码。不过奇怪的是，我还没看到while里用什么类似C中的break语句的语句跳出while循环。</div>
<div>&nbsp;</div>
<div>待续~~~~</div>]]></description>
		</item>
		
</channel>
</rss>
