<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>勒色的Blog</title>
  <link>http://michaels.blogbus.com</link>
  <description><![CDATA[生活、游记、见闻、上海、摄影、影评、计算机、互联网......]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Tue, 24 Nov 2009 09:44:22 +0800</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/2/9/4/1612492/avatar_1612492_96.jpg</url>
									<title>勒色的Blog</title>
									<link>http://michaels.blogbus.com</link>
								</image>  <item>
   <title>出现bad interpreter:No such file or directory的原因</title>
   <description><![CDATA[<p>出现这个提示原因是文件格式的问题。</p>
<p>如果你是在windows下写的脚本，可能有些不可见的字符，传到linux或unix上执行就会报这个错误。</p>
<p>如果是DOS格式的文件，每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.</p>
<p>首先查看你的文件格式是DOS格式还是UNIX格式或者MAC格式。</p>
<p>如何判断文件格式？</p>
<p>vi filename</p>
<p>:set ff?</p>
<p>这时你可以看到是dos或者unix字样。如果是dos格式，使用set ff=unix把它强制转换为unix格式，保存退出即可。</p>
<p>joe filename</p>
<p>如果是DOS格式的, 那么行尾会有很多绿色的^M字样出现. 你也可以用上述办法把它转为UNIX格式的.</p>
<p>od -t x1 filename</p>
<p>如果你看到有0d 0a 这样的字符, 那么它是dos格式的, 如果只有0a而没有0d, 那么它是UNIX格式的, 同样可以用上述方法把它转为UNIX格式的.</p>
<p>转换不同平台的文本文件格式也可以用这些工具：</p>
<p>unix2dos或dos2unix</p>
<p>sed 's/^M//' filename &gt; tmp_filename<br />mv -f tmp_filename filename</p>
<p>^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/44427299.html">comm命令</a> 2009-08-17</div><div><a href="http://michaels.blogbus.com/logs/16063524.html">Rsync服务器架设方法</a> 2008-02-27</div><div><a href="http://michaels.blogbus.com/logs/15683106.html">如何安装RPM的源码包</a> 2008-02-19</div><div><a href="http://michaels.blogbus.com/logs/11535201.html">比较两个文件内容的差别</a> 2007-08-24</div><div><a href="http://michaels.blogbus.com/logs/10726722.html">如何删除指定时间以前的文件</a> 2007-05-16</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F46595831.html&title=%E5%87%BA%E7%8E%B0bad+interpreter%3ANo+such+file+or+directory%E7%9A%84%E5%8E%9F%E5%9B%A0">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/46595831.html</link>
   <author>勒色</author>
   <pubDate>Wed, 16 Sep 2009 17:06:18 +0800</pubDate>
  </item>
  <item>
   <title>atime/ctime/mtime</title>
   <description><![CDATA[<div><strong>1、含义：</strong></div>
<div>&nbsp; 文件的 Access time，atime 是在读取文件或者执行文件时更改的；<br />&nbsp; 文件的 Modified time，mtime 是在写入文件时随文件内容的更改而更改的；<br />&nbsp; 文件的 Create time，ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>2、文件各种事件标记的显示方法</strong></div>
<div>&nbsp;</div>
<div>&nbsp; ls -lc filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出文件的 ctime <br />&nbsp; ls -lu filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出文件的 atime <br />&nbsp; ls -l filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出文件的 mtime&nbsp; <br /></div>
<div>&nbsp;</div>
<div>&nbsp; 修改文件,-mtime 改了, -ctime 也会改.<br />&nbsp; 访问文件,-atime 改了, -ctime 没变.<br />&nbsp; chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.<br />&nbsp; touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.<br />&nbsp; touch -m 改修改时间时,-ctime当然也改了</div><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/44427299.html">comm命令</a> 2009-08-17</div><div><a href="/logs/44006495.html">SHELL下十二种读文件的方法</a> 2009-08-12</div><div><a href="/logs/17792103.html">一些言论</a> 2008-03-28</div><div><a href="/logs/12857592.html">你到底在哪一个世界？</a> 2007-12-28</div><div><a href="/logs/11288694.html">Vista光盘上的这三个家伙是谁？</a> 2007-07-24</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F44502104.html&title=atime%2Fctime%2Fmtime">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/44502104.html</link>
   <author>勒色</author>
   <pubDate>Tue, 18 Aug 2009 18:39:40 +0800</pubDate>
  </item>
  <item>
   <title>支持多文件夹的免费网络同步工具</title>
   <description><![CDATA[<p>给大家介绍两款网络同步工具。</p>
<p><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></p>
<p><strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>就是一款非常好用的免费网络文件同步工具(当然它也算是一个服务)。当你在电脑A使用<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>时，指定文件夹里所有文件的改动均会自动地&ldquo;同步&rdquo; 到<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>的服务器，当下次你在电脑B需要使用这些文件时，你只需登录你的账户，所有被同步的文件均会自动下载到B电脑中，同样，你在电脑B对某文件的修改，也会体现在电脑A上，而所有这一切均是全自动的。<br /><br />使用<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>前，需要先安装它的桌面客户端，<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>提供了Windows、Mac和 Linux 版本，可以跨平台实现文件同步！并且它还提供Web访问功能，当你在不方便安装客户端的地方可以通过Web在浏览器访问你的文件，将它们下载回来使用。<br />&nbsp;&nbsp;&nbsp; <br /><strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>的 Windows 版客户端与Windows 集成得很好（Mac版的我还没用过不好说），直接将文件拷贝进设定好的同步目录，它们就能瞬间（总之很快啦）实现文件同步。当该文件的图标左下角出现绿色的钩钩就表示它已经同步好了。当然<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>还可以自动同步更新修改后的文件。并且，你还可以设置文件夹属性为公开或者私有，甚至将其共享给朋友共同操作编辑。除此而外，<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>还提供版本控制，即使误删文档也能够复原。<br />&nbsp;&nbsp;&nbsp; <br /><strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>的特性：<br /><br />1、处基本的客户端外，<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>提供 web 访问，可以很方便地在任何地方访问自己的文件。<br />2、<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>提供文件共享功能，并且能支持文件下载地址的外链（非下载页面）；<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>文件链接路径的形式都是&ldquo;固定目录+文件名&rdquo; 文件名是完全自定义的，而不像有些网盘把文件名变成一串随机数字。<br />3、免费用户拥有2G容量，对很多人来说已经足够了，并且免费用户稳定性也极高，至少我到现在均没发现连接失败的情况，上传下载速度在国内均很快，完全可以接受的。<br />4、提供文件版本控制功能，这个功能可以说是灰常爽的！！接触过编程的朋友如果用过SVN/CVS等版本控制的话，就知道它有多爽了。<br />5、你对文件修改后不需要手动去上传文件，<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>会自动在后台为你静默同步的。同样，在别的电脑修改文件后你也不需手动下载，<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>也会自动为你更新本地的文件的。<br />6、<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>对图片的支持更好，它整合了相册功能，让你的照片同步更方便。<br />7、<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>具有协同合作的功能，可以邀请朋友共同对某一文件夹内的文件进行编辑与更新。<br />由于<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>的同步特性，我们可以很方便地打造出一些很实用的同步应用。例如 <strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>同步 网博士、OneNote、网文快捕等软件的数据库打造无处不在的笔记本。如果你使用EverNote3，虽然它本身提供网络同步功能，可是免费用户仅有40M/月的流量，基本上都不够用的，这时我们也可以用<strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>同步EverNote的数据库，实现山寨版的同步功能，呵呵。又如将 <strong><a title="DropBox" href="https://www.getdropbox.com/referrals/NTE3NDU5MjI5" target="_blank"><strong>DropBox</strong></a></strong>与 KeePass 合用打造移动密码库、同步你的工作目录、编程代码、文档报表、相册照片&hellip;&hellip;</p>
<p>&nbsp;</p>
<p><a title="SugarSync" href="https://www.sugarsync.com/referral?rf=k7jq4p4fe4mn" target="_blank"><strong>SugarSync</strong></a></p>
<p>它除了不支持Linux之外，几乎集了各家所长，是一个很值得推荐的服务。<strong><a title="SugarSync" href="https://www.sugarsync.com/referral?rf=k7jq4p4fe4mn" target="_blank"><strong>SugarSync</strong></a></strong> 是来自美国加利福尼亚州的Sharpcast网络存储公司的产品，提供了<strong>2.5G免费网络硬盘空间 </strong>(推荐朋友注册可以增大自己的免费空间，很容易就能拥有10G以上的空间的)，具有数据<strong>自动备份、同步、分享等功能</strong>，可以非常方便的将你指定的目录同步到你的<strong><a title="SugarSync" href="https://www.sugarsync.com/referral?rf=k7jq4p4fe4mn" target="_blank"><strong>SugarSync</strong></a></strong>网盘中。</p>
<p><strong><a title="SugarSync" href="https://www.sugarsync.com/referral?rf=k7jq4p4fe4mn" target="_blank"><strong>SugarSync</strong></a></strong>的免费帐户可支持2台电脑与网络硬盘空间同步。除了使用<strong><a title="SugarSync" href="https://www.sugarsync.com/referral?rf=k7jq4p4fe4mn" target="_blank"><strong>SugarSync</strong></a></strong>提供的PC客户端/Mac客户端外，用户还可通过iPhone/黑莓/Windows Mobile等手机进行访问。</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/21540312.html">阿里巴巴集团致全中国人民的一封信</a> 2008-05-24</div><div><a href="/logs/11534640.html">《哈利·波特》中文版的尴尬（二）</a> 2007-08-16</div><div><a href="/logs/10909346.html">自动隐藏NavBar</a> 2007-07-15</div><div><a href="/logs/10791532.html">给企鹅置家具——谷歌桌面 Linux 版（Beta）发布</a> 2007-06-30</div><div><a href="/logs/10408716.html">对emailRss.cn有些失望了</a> 2006-08-08</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F44481409.html&title=%E6%94%AF%E6%8C%81%E5%A4%9A%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E5%85%8D%E8%B4%B9%E7%BD%91%E7%BB%9C%E5%90%8C%E6%AD%A5%E5%B7%A5%E5%85%B7">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/44481409.html</link>
   <author>勒色</author>
   <pubDate>Tue, 18 Aug 2009 13:57:19 +0800</pubDate>
  </item>
  <item>
   <title>comm命令</title>
   <description><![CDATA[<p>In our work, we often encounter the following questions:<br />在我们的工作中，我经常遇到下面的问题：<br />I have two files: file1 and file2:<br />有两个文件：文件1和文件2：<br />1) How can I print out the lines that are only contained in file1?<br />1) 如何打印出只存在于文件1中的内容？<br />2) How can I print out the lines that are only contained in file2?<br />2) 如何打印出只存在于文件2中的内容？<br />3) How can I print out the lines that are contained both in file1 and file2?<br />3) 如何打印出文件1和文件2都有的内容？<br /><br />There is a powerful shell command that can easily meet our needs, it is: comm. <br />这有一个很好的shell命令能够满足我们的需求，它就是comm。<br /><br />When you meet the above questions, "comm" should be your first choice:-)<br />当你遇到上面的问题，&ldquo;comm&rdquo;应该是你第一选择:-)<br /><br />comm [ -123 ]??file1??file2<br /><br />comm will read file1 and file2 and generate three columns of output: <br />comm 将会读取文件1和文件2并且产生三列输出：<br />lines only in file1; lines only??in file2; and lines in both files. <br />只存在文件1中的行；只存在文件2中的行；两个文件都存在的行。<br />For detailed explanation, pls man comm.<br />更详细的解释，请参阅man comm。<br /><br />Example:<br />例如：<br /><br />bash-2.03$ cat file1<br />11111111<br />22222222<br />33333333<br />44444444<br />55555555<br />66666666<br />77777777<br />88888888<br />99999999<br />bash-2.03$ cat file2<br />00000000<br />22222222<br />44444444<br />66666666<br />88888888<br /><br />1) suppress lines unique to FILE1<br />1) 过滤掉file1中的内容<br />bash-2.03$ comm -1 file1 file2 <br />00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22222222<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44444444<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 66666666<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 88888888<br /><br />2) suppress lines unique to FILE2<br />2) 过滤掉file2中的内容<br />bash-2.03$ comm -2 file1 file2 <br />11111111<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22222222<br />33333333<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44444444<br />55555555<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 66666666<br />77777777<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 88888888<br />99999999<br /><br />3) suppress lines that appear in both files<br />3) 过滤掉file1和file2中都有的内容<br />bash-2.03$ comm -3 file1 file2 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000<br />11111111<br />33333333<br />55555555<br />77777777<br />99999999<br /><br />4) Print out the lines that are only contained in file1?<br />4) 打印出只存在于文件1中的内容？<br />bash-2.03$ comm -23 file1 file2<br />11111111<br />33333333<br />55555555<br />77777777<br />99999999<br /><br />5) Print out the lines that are only contained in file2?<br />5) 打印出只存在于文件2中的内容？<br />bash-2.03$ comm -13 file1 file2<br />00000000<br /><br />6) Print out the lines that are contained both in file1 and file2?<br />6) 打印出文件1和文件2都有的内容？<br />bash-2.03$ comm -12 file1 file2<br />22222222<br />44444444<br />66666666<br />88888888<br /><br />Besides the comm, we still have various ways to finish the above tasks.<br />除了comm，我们还有其他方法来完成这些任务。<br /><br />4) Print out the lines that are only contained in file1?<br />4) 打印出只存在于文件1中的内容？<br />diff file1 file2 | grep "^&lt;"|sed 's/^&lt; //g'<br />for i in $(&lt;file1); do (grep $i file2)||echo $i&gt;&gt;temp ; done;<br />cat temp<br /><br />In comparison, comm is much easier to remember. :-)<br />相比之下，comm更加便于记忆。</p>
<p>转自：http://hi.baidu.com/will_hu/blog/item/4b05fedf0276fd5fcdbf1a6d.html</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/46595831.html">出现bad interpreter:No such file or directory的原因</a> 2009-09-16</div><div><a href="http://michaels.blogbus.com/logs/44006495.html">SHELL下十二种读文件的方法</a> 2009-08-12</div><div><a href="http://michaels.blogbus.com/logs/16063524.html">Rsync服务器架设方法</a> 2008-02-27</div><div><a href="http://michaels.blogbus.com/logs/15683106.html">如何安装RPM的源码包</a> 2008-02-19</div><div><a href="http://michaels.blogbus.com/logs/11535201.html">比较两个文件内容的差别</a> 2007-08-24</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F44427299.html&title=comm%E5%91%BD%E4%BB%A4">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/44427299.html</link>
   <author>勒色</author>
   <pubDate>Mon, 17 Aug 2009 17:02:11 +0800</pubDate>
  </item>
  <item>
   <title>SHELL下十二种读文件的方法</title>
   <description><![CDATA[<p><span style="font-family: Courier New;">#!/usr/bin/ksh<br />
#<br />
# SCRIPT: 12_ways_to_parse.ksh.ksh<br />
#<br />
#<br />
# REV: 1.2.A<br />
#<br />
# PURPOSE:  This script shows the different ways of reading<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  a file line by line.  Again there is not just one way<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  to read a file line by line and some are faster than<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  others and some are more intuitive than others.<br />
#<br />
# REV LIST:<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  03/15/2002 - Randy Michael<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Set each of the while loops up as functions and the timing<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  of each function to see which one is the fastest.<br />
#<br />
#######################################################################<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NOTE: To output the timing to a file use the following syntax:<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  12_ways_to_parse.ksh file_to_process  &gt; output_file_name 2&gt;&amp;1<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  The actaul timing data is sent to standard error, file <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  descriptor (2), and the function name header is sent<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  to standard output, file descriptor (1).<br />
#<br />
#######################################################################<br />
#<br />
# set -n  # Uncomment to check command syntax without any execution<br />
# set -x  # Uncomment to debug this script<br />
#</span>
</p>
<p><span style="font-family: Courier New;">FILENAME="$1"<br />
TIMEFILE="/tmp/loopfile.out"<br />
&gt;$TIMEFILE<br />
THIS_SCRIPT=$(basename $0)</span></p>
<p><span style="font-family: Courier New;">######################################<br />
function usage<br />
{<br />
echo "\nUSAGE: $THIS_SCRIPT  file_to_process\n"<br />
echo "OR - To send the output to a file use: "<br />
echo "\n$THIS_SCRIPT  file_to_process  &gt; output_file_name 2&gt;&amp;1 \n"<br />
exit 1<br />
}<br />
######################################<br />
function while_read_LINE<br />
{<br />
cat $FILENAME | while read LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
}<br />
######################################<br />
function while_read_LINE_bottom <br />
{<br />
while read LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :</span></p>
<p><span style="font-family: Courier New;">done &lt; $FILENAME<br />
}<br />
######################################<br />
function while_line_LINE_bottom<br />
{<br />
while line LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo $LINE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done &lt; $FILENAME<br />
}<br />
######################################<br />
function cat_while_LINE_line  <br />
{<br />
cat $FILENAME | while LINE=`line`<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
}<br />
######################################<br />
function while_line_LINE<br />
{<br />
cat $FILENAME | while line LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
}<br />
######################################<br />
function while_LINE_line_bottom <br />
{<br />
while LINE=`line`<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :</span></p>
<p><span style="font-family: Courier New;">done &lt; $FILENAME <br />
}<br />
######################################<br />
function while_LINE_line_cmdsub2 <br />
{<br />
cat $FILENAME | while LINE=$(line)<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
}<br />
######################################<br />
function while_LINE_line_bottom_cmdsub2 <br />
{<br />
while LINE=$(line)<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :</span></p>
<p><span style="font-family: Courier New;">done &lt; $FILENAME <br />
}<br />
######################################<br />
function while_read_LINE_FD <br />
{<br />
exec 3&lt;&amp;0<br />
exec 0&lt; $FILENAME<br />
while read LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
exec 0&lt;&amp;3<br />
}<br />
######################################<br />
function while_LINE_line_FD <br />
{<br />
exec 3&lt;&amp;0<br />
exec 0&lt; $FILENAME<br />
while LINE=`line`<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
exec 0&lt;&amp;3<br />
}<br />
######################################<br />
function while_LINE_line_cmdsub2_FD<br />
{<br />
exec 3&lt;&amp;0<br />
exec 0&lt; $FILENAME<br />
while LINE=$(line)<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  print "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done<br />
exec 0&lt;&amp;3<br />
}<br />
######################################<br />
function while_line_LINE_FD <br />
{<br />
exec 3&lt;&amp;0<br />
exec 0&lt; $FILENAME</span></p>
<p><span style="font-family: Courier New;">while line LINE<br />
do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  echo "$LINE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  :<br />
done</span></p>
<p><span style="font-family: Courier New;">exec 0&lt;&amp;3<br />
}<br />
######################################<br />
########### START OF MAIN ############<br />
######################################</span></p>
<p><span style="font-family: Courier New;"># Test the Input</span></p>
<p><span style="font-family: Courier New;"># Looking for exactly one parameter<br />
(( $# == 1 )) || usage</span></p>
<p><span style="font-family: Courier New;"># Does the file exist as a regular file?<br />
[[ -f $1 ]] || usage</span></p>
<p><span style="font-family: Courier New;">echo "\nStarting File Processing of each Method\n"</span></p>
<p><span style="font-family: Courier New;">echo "Method 1:"<br />
echo "\nfunction while_read_LINE\n" &gt;&gt; $TIMEFILE<br />
echo "function while_read_LINE"<br />
time while_read_LINE &gt;&gt; $TIMEFILE<br />
echo "\nMethod 2:"<br />
echo "\nfunction while_read_LINE_bottom\n" &gt;&gt; $TIMEFILE<br />
echo "function while_read_LINE_bottom"<br />
time while_read_LINE_bottom &gt;&gt; $TIMEFILE<br />
echo "\nMethod 3:"<br />
echo "\nfunction while_line_LINE_bottom\n" &gt;&gt; $TIMEFILE<br />
echo "function while_line_LINE_bottom"<br />
time while_line_LINE_bottom &gt;&gt; $TIMEFILE<br />
echo "\nMethod 4:"<br />
echo "\nfunction cat_while_LINE_line\n" &gt;&gt; $TIMEFILE<br />
echo "function cat_while_LINE_line"<br />
time cat_while_LINE_line &gt;&gt; $TIMEFILE<br />
echo "\nMethod 5:"<br />
echo "\nfunction while_line_LINE\n" &gt;&gt; $TIMEFILE<br />
echo "function while_line_LINE"<br />
time while_line_LINE &gt;&gt; $TIMEFILE<br />
echo "\nMethod 6:"<br />
echo "\nfunction while_LINE_line_bottom\n" &gt;&gt; $TIMEFILE<br />
echo "function while_LINE_line_bottom"<br />
time while_LINE_line_bottom &gt;&gt; $TIMEFILE<br />
echo "\nMethod 7:"<br />
echo "\nfunction while_LINE_line_cmdsub2\n" &gt;&gt; $TIMEFILE<br />
echo "function while_LINE_line_cmdsub2"<br />
time while_LINE_line_cmdsub2 &gt;&gt; $TIMEFILE<br />
echo "\nMethod 8:"<br />
echo "\nfunction while_LINE_line_bottom_cmdsub2\n" &gt;&gt; $TIMEFILE<br />
echo "function while_LINE_line_bottom_cmdsub2"<br />
time while_LINE_line_bottom_cmdsub2 &gt;&gt; $TIMEFILE<br />
echo "\nMethod 9:"<br />
echo "\nfunction while_read_LINE_FD\n" &gt;&gt; $TIMEFILE<br />
echo "function while_read_LINE_FD"<br />
time while_read_LINE_FD &gt;&gt; $TIMEFILE<br />
echo "\nMethod 10:"<br />
echo "\nfunction while_LINE_line_FD\n" &gt;&gt; $TIMEFILE<br />
echo "function while_LINE_line_FD"<br />
time while_LINE_line_FD &gt;&gt; $TIMEFILE<br />
echo "\nMethod 11:"<br />
echo "\nfunction while_LINE_line_cmdsub2_FD\n" &gt;&gt; $TIMEFILE<br />
echo "function while_LINE_line_cmdsub2_FD"<br />
time while_LINE_line_cmdsub2_FD &gt;&gt; $TIMEFILE<br />
echo "\nMethod 12:"<br />
echo "\nfunction while_line_LINE_FD\n" &gt;&gt; $TIMEFILE<br />
echo "function while_line_LINE_FD"<br />
time while_line_LINE_FD &gt;&gt; $TIMEFILE</span></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/44427299.html">comm命令</a> 2009-08-17</div><div><a href="/logs/44502104.html">atime/ctime/mtime</a> 2009-08-18</div><div><a href="/logs/21396564.html">史上最强乌鸦嘴</a> 2008-05-22</div><div><a href="/logs/10791502.html">豆汁是什么？</a> 2007-06-22</div><div><a href="/logs/10710279.html">在Solaris上安装Apache的错误</a> 2007-04-26</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F44006495.html&title=SHELL%E4%B8%8B%E5%8D%81%E4%BA%8C%E7%A7%8D%E8%AF%BB%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%B9%E6%B3%95">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/44006495.html</link>
   <author>勒色</author>
   <pubDate>Wed, 12 Aug 2009 13:55:15 +0800</pubDate>
  </item>
  <item>
   <title>在SUSE10中如何更改网卡IP</title>
   <description><![CDATA[<p>修改下面文件即可更改IP地址：<br /><span style="font-family: Courier New;"># vi /etc/sysconfig/network/ifcfg-eth-id-00\:0c\:29\:23\:2a\:a8<br />BOOTPROTO='static'<br />BROADCAST=''<br />ETHTOOL_OPTIONS=''<br />IPADDR='192.168.6.51'<br />MTU=''<br />NAME='AMD PCnet - Fast 79C971'<br />NETMASK='255.255.254.0'<br />NETWORK=''<br />REMOTE_IPADDR=''<br />STARTMODE='auto'<br />UNIQUE='rBUF.weGuQ9ywYPF'<br />USERCONTROL='no'<br />_nm_name='bus-pci-0000:00:11.0'</span></p>
<p>也可以使用yast管理工具来更改，方法和更该主机名类似，请参考这篇文章：<a title="在SLES10中如何修改主机名" href="http://michaels.blogbus.com/logs/42335359.html" target="_blank">《在SLES10中如何修改主机名》</a></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/42335359.html">在SLES10中如何修改主机名</a> 2009-07-14</div><div><a href="/logs/33211408.html">我的2008</a> 2008-12-31</div><div><a href="/logs/11534925.html">你是哪个变形金刚？</a> 2007-08-18</div><div><a href="/logs/10726198.html">上海地铁（二）</a> 2007-05-04</div><div><a href="/logs/10661119.html">非常遗憾，我今天没有再碰上那个画油画的老人</a> 2006-12-01</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F42335675.html&title=%E5%9C%A8SUSE10%E4%B8%AD%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%E7%BD%91%E5%8D%A1IP">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/42335675.html</link>
   <author>勒色</author>
   <pubDate>Tue, 14 Jul 2009 16:15:20 +0800</pubDate>
  </item>
  <item>
   <title>在SLES10中如何修改主机名</title>
   <description><![CDATA[<p>SLES10中可以用yast2 network来修改主机名(hostname),也可以通过修改配置文件的方式并运行命令实现这个目的。<br /><br />方法1. 通过yast2管理工具进行配置<br />在console中运行yast2工具修改主机名(hostname)<br /><span style="font-family: Courier New;"># yast2 network</span><br />"Network Configuration"中选择"Network Card"点击&ldquo;Launch&rdquo;，在&ldquo;Network Setup Method&rdquo;中选择&ldquo;User Controlled with NetworkManager&rdquo;，点击&ldquo;Next&rdquo;，在&ldquo;Network Card Configuration Overview&rdquo;中选择&ldquo;AMD PCnet-Fast79C971&rdquo;，点击&ldquo;Edit&rdquo;，在&ldquo;Network Address Setup&rdquo;中点击&ldquo;Address&rdquo;下面的&ldquo;Hostname and Name Server&rdquo;，在弹出的对话框中点击&ldquo;Modify&rdquo;，然后在&ldquo;Hostname and Domain Name（Global）&rdquo;下面进行修改就可以了。<br /><br />方法2. 通过修改配置文件的方式并运行命令修改主机名<br />修改/etc/HOSTNAME文件，在此文件中保存主机名，例如：<br /><span style="font-family: Courier New;">SLES-1</span><br /><br />然后运行命令设置主机名<br /><span style="font-family: Courier New;"># /etc/rc.d/boot.localnet start</span><br /><br />方法3. 运行 sysctl 动态改变主机名<br /><span style="font-family: Courier New;"># sysctl -w kernel.hostname=SLES-1</span></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/42335675.html">在SUSE10中如何更改网卡IP</a> 2009-07-14</div><div><a href="/logs/40520519.html">如果你不能成为蒸汽压路机，你就会成为它脚下的路</a> 2009-06-05</div><div><a href="/logs/11535516.html">你会逛南京路吗？</a> 2007-09-22</div><div><a href="/logs/10726828.html">曼谷印象</a> 2007-05-26</div><div><a href="/logs/10414629.html">我的博客没人看</a> 2006-08-25</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F42335359.html&title=%E5%9C%A8SLES10%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%E4%B8%BB%E6%9C%BA%E5%90%8D">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/42335359.html</link>
   <author>勒色</author>
   <pubDate>Tue, 14 Jul 2009 16:04:19 +0800</pubDate>
  </item>
  <item>
   <title>Google的9条创新原则</title>
   <description><![CDATA[<ul>
<li><strong>Innovation, not instant perfection</strong>/创新不会马上就完美<br /> Start rough, learn and iterate./开始粗糙，学习和迭代</li>
<li><strong>Ideas come from everywhere</strong>/点子来自任何地方<br /> Ideas can come from the engineers, managers, users even the financial team.</li>
<li><strong>Share everything you can</strong>/分享一切<br /> Everything is put on the intranet, so employees know what is happening./任何事情都可以在内网分享</li>
<li><strong>You&rsquo;re brilliant, we&rsquo;re hiring</strong>/你有才，我雇你<br />
Founders Larry Page and Sergey Brin approve hires. They favor
intelligence over experience. /Larry Page和Sergey Brin的雇人之道是，喜欢聪明人胜过有经验的人</li>
<li><strong>A license to pursue dreams</strong>/允许追求梦想<br /> Letting employees use 20% of their time on what ever they want./让员工用20%的时间做爱做的事</li>
<li><strong>Data is apolitical</strong>/数据中没有政治<br /> There is no &ldquo;I like&rdquo;, it is all about the basing decisions on data./不要说&ldquo;我喜欢&rdquo;，所有决定都靠数据立足</li>
<li><strong>Creativity loves constraints</strong> / 创造力爱制约<br /> Engineers thrive on constraints. /工程师靠限制发展</li>
<li><strong>It&rsquo;s users, not money</strong> / 是用户而不是钱<br /> If you can successfully engage users, you can monetize them/如果你能成功吸引用户，你就能赚钱</li>
<li><strong>Don&rsquo;t kill projects, morph them</strong>/不要毙掉项目，改造它<br />
Products that doesn&rsquo;t seem to respond well in the market should be
morphed into something the market needs, not cancelled
/产品市场反响不好应该改造它以适应市场的需求，而不要轻易取消它</li>
</ul><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/11534979.html">谷歌拼音输入法1.0.21.0版新功能支持自定义快捷键</a> 2007-08-21</div><div><a href="http://michaels.blogbus.com/logs/11533641.html">Google恶搞baidu</a> 2007-08-14</div><div><a href="http://michaels.blogbus.com/logs/10791532.html">给企鹅置家具——谷歌桌面 Linux 版（Beta）发布</a> 2007-06-30</div><div><a href="http://michaels.blogbus.com/logs/10726224.html">Google Browser Sync一个不错的FireFox插件</a> 2007-05-04</div><div><a href="http://michaels.blogbus.com/logs/10726109.html">Google谷歌拼音输入法更新到1.0.18.0</a> 2007-04-30</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F41648076.html&title=Google%E7%9A%849%E6%9D%A1%E5%88%9B%E6%96%B0%E5%8E%9F%E5%88%99">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/41648076.html</link>
   <author>勒色</author>
   <pubDate>Mon, 29 Jun 2009 14:10:45 +0800</pubDate>
  </item>
  <item>
   <title>《Perl语言入门》第四版习题（四）</title>
   <description><![CDATA[<p><strong>5.11练习</strong></p>
<ol>
<li>写一个程序，类似于cat，但保持输出的顺序关系。（某些系统的名字可能是tac。）如果运行此程序：./tac fred barney betty, 输出将是文件betty 的内容，从最后一行到第一行，然后是barney, 最后是fred, 同样是从最后一行到第一行。（注意使用./确保调用的是你自己的程序，而非系统提供的）</li>
<li>写一个程序，要求用户在不同的行中输入一些字符串，将此字符串打印出来，规则是：每一条占20 个字符宽度，右对齐。为了确保正确的输出，在开头打印出一串数字作为比较（帮助调试）。注意，不要犯19 个字符宽度的错误。例如，如果输入，hello, good-bye，则输出为：<br />123456789012345678901234567890123456789012345678901234567890<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;&nbsp;&nbsp; hello<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; good-bye</li>
<li>修改上一个程序，允许用户选择宽度，如，用户输入30，hello, good-bye(在不同的行中)，则每一行的宽度为30。（提示：参阅第二章相应部分）。提示，如果选择的宽度太长，可以增加比较行的长度。</li>
</ol>
<p><strong>1:</strong><br /><span style="font-family: Courier New;">#!/usr/bin/perl -w<br />#Date:2009-6-18<br />#&lt;Leanning Perl 4th Edition&gt; Exercise 5-1<br />print reverse &lt;&gt;;</span><br /><strong>2-3:</strong><br /><span style="font-family: Courier New;">#!/usr/bin/perl -w<br />#Date:2009-6-18<br />#&lt;Leanning Perl 4th Edition&gt; Exercise 5-2<br />print "What column width would you like?";<br />chomp (my $width = &lt;STDIN&gt;);<br />print "Enter some lines, then press Ctrl+D:\n";<br />chomp (my @line = &lt;STDIN&gt;);<br />print "1234567890" x (($width+9)/10), "\n";<br />foreach (@line) {<br />printf "%${width}s\n", $_;<br />}</span></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/40915261.html">《Perl语言入门》第四版习题（三）</a> 2009-06-12</div><div><a href="http://michaels.blogbus.com/logs/40747514.html">《Perl语言入门》第四版习题（二）</a> 2009-06-09</div><div><a href="http://michaels.blogbus.com/logs/40709145.html">《Perl语言入门》第四版习题（一）</a> 2009-06-08</div><div><a href="/logs/42335359.html">在SLES10中如何修改主机名</a> 2009-07-14</div><div><a href="/logs/10710266.html">重游武夷山</a> 2007-04-22</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F41184094.html&title=%E3%80%8APerl%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E3%80%8B%E7%AC%AC%E5%9B%9B%E7%89%88%E4%B9%A0%E9%A2%98%EF%BC%88%E5%9B%9B%EF%BC%89">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/41184094.html</link>
   <author>勒色</author>
   <pubDate>Thu, 18 Jun 2009 17:23:12 +0800</pubDate>
  </item>
  <item>
   <title>《Perl语言入门》第四版习题（三）</title>
   <description><![CDATA[<p><strong>4.11练习</strong></p>
<ol>
<li>写一个名为&amp;total 的子程序，返回一列数字的和。提示：子程序不应当有任何的I/O 操作；它处理调用的参数，返回处理后的值给调用者。结合下面的程序来练习，它检测此子程序是否正常工作。第一组数组之和我25。<br /><span style="font-family: Courier New;">my @fred = qw{ 1 3 5 7 9 };<br />my $fred_total = &amp;total(@fred);<br />print "The total of \@fred is $fred_total.\n";<br />print "Enter some numbers on separate lines: ";<br />my $user_total = &amp;total(&lt;STDIN&gt;);<br />print "The total of those numbers is $user_total.\n";</span></li>
<li>利用上题的子程序，写一个程序计算从1 到1000 的数字的和。</li>
<li>额外的练习：写一个子程序，名为&amp;above_average，将一列数字作为其参数，返回所有大于平均值的数字（提示：另外写一个子程序来计算平均值，总和除以数字的个数）。利用下面的程序进行测试：<br /><span style="font-family: Courier New;">my @fred = &amp;above_average(1..10);<br />print "\@fred is @fred\n";<br />print "(Should be 6 7 8 9 10)\n";<br />my @barney = &amp;above_average(100, 1..10);<br />print "\@barney is @barney\n";<br />print "(Should be just 100)\n";</span></li>
</ol>
<p><strong>1:</strong><br /><span style="font-family: Courier New;">#!/usr/bin/perl -w<br />#Date:2009-6-12<br />#&lt;Leanning Perl 4th Edition&gt; Exercise 4-1<br />use strict;<br /><br />sub total {<br />&nbsp;&nbsp;&nbsp; my $sum=shift @_;<br />&nbsp;&nbsp;&nbsp; foreach (@_) {<br />&nbsp;&nbsp;&nbsp; $sum=$sum+$_;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; $sum;<br />}<br /><br />my @fred=qw {1 3 5 7 9};<br />my $fred_total=&amp;total(@fred);<br />print "The Total of \@fred is $fred_total.\n";<br /><br />print "Enter some numbers on separate lines: ";<br />my $user_total = &amp;total(&lt;STDIN&gt;);<br />print "The Total of those numbers is $user_total.\n";</span><br /><br />2:<br /><span style="font-family: Courier New;">#!/usr/bin/perl -w<br />#Date:2009-6-12<br />#&lt;Leanning Perl 4th Edition&gt; Exercise 4-2<br />use strict;<br /><br />sub total {<br />&nbsp;&nbsp;&nbsp; my $sum=shift @_;<br />&nbsp;&nbsp;&nbsp; foreach (@_) {<br />&nbsp;&nbsp;&nbsp; $sum=$sum+$_;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; $sum;<br />}<br /><br />my @array=1 .. 1000;<br />my $array_total=&amp;total(@array);<br />print "The sum of 1 to 1000 is $array_total.\n";</span><br /><br />3:<br /><span style="font-family: Courier New;">#!/usr/bin/perl -w<br />#Date:2009-6-12<br />#&lt;Leanning Perl 4th Edition&gt; Exercise 4-3<br />use strict;<br /><br />sub average {<br />&nbsp;&nbsp;&nbsp; my $number=@_;<br />&nbsp;&nbsp;&nbsp; my $sum=shift @_;<br />&nbsp;&nbsp;&nbsp; foreach (@_) {<br />&nbsp;&nbsp;&nbsp; $sum=$sum+$_;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; my $array_average=$sum/$number;<br />}<br /><br />sub above_average {<br />&nbsp;&nbsp;&nbsp; my @above;<br />&nbsp;&nbsp;&nbsp; foreach (@_) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($_&gt;&amp;average(@_)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push @above,$_;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />@above;<br />}</span><br /><br />my @above_fred = &amp;above_average(1 .. 10);<br />print "The above average of \@fred is @above_fred\n";<br /><br />my @above_barney = &amp;above_average(100, 1 .. 10);<br />print "The above average of \@barney is @above_barney\n";</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://michaels.blogbus.com/logs/41184094.html">《Perl语言入门》第四版习题（四）</a> 2009-06-18</div><div><a href="http://michaels.blogbus.com/logs/40747514.html">《Perl语言入门》第四版习题（二）</a> 2009-06-09</div><div><a href="http://michaels.blogbus.com/logs/40709145.html">《Perl语言入门》第四版习题（一）</a> 2009-06-08</div><div><a href="/logs/10726170.html">上海地铁（一）</a> 2007-05-03</div><div><a href="/logs/10414580.html">在宜家买的洗衣袋在人民广场用来当垃圾袋</a> 2006-08-25</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmichaels.blogbus.com%2Flogs%2F40915261.html&title=%E3%80%8APerl%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E3%80%8B%E7%AC%AC%E5%9B%9B%E7%89%88%E4%B9%A0%E9%A2%98%EF%BC%88%E4%B8%89%EF%BC%89">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://michaels.blogbus.com/logs/40915261.html</link>
   <author>勒色</author>
   <pubDate>Fri, 12 Jun 2009 18:05:44 +0800</pubDate>
  </item>
 </channel>
</rss>
