﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-ivaneeo's blog-随笔分类-perl－灵活的力量</title><link>http://www.blogjava.net/ivanwan/category/9492.html</link><description>自由的力量，自由的生活。</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:40:24 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:40:24 GMT</pubDate><ttl>60</ttl><item><title>perl常数定义的神奇之处</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/20/42222.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 20 Apr 2006 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/20/42222.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/42222.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/20/42222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/42222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/42222.html</trackback:ping><description><![CDATA[浮点数：<br />   7.25e45   #可以直接用科学计数法定义<br />   -65e24   <br />   -12e-12<br />   -1.2E-23<br /><br />十进制整数：<br />   61298040283768   #这里整数到底有多少位看不太清<br />   61_298_040_283_768   #这样就清楚了！<br /><br />非十进制整数：<br />   0377   #八进制数<br />   0xff   #十六进制数<br />   0b1111111   #二进制数<br />   注：有两个进制转换函数：oct()和hex().<br />      oct(144);   #这里把一个八进制数转换为10进制数<br />      <font style="BACKGROUND-COLOR: #808080">100</font><br />      hex(64);   #这里把一个十六进制数转换为10进制数<br />      <font style="BACKGROUND-COLOR: #808080">100<br /></font><br />数字操作符：<br />   perl会自动识别计算结果是整数还是浮点数。<br />   例：10.2   /   0.3   #整数34<br />            10   /   3   #浮点数3.3333333.....<br />   <br />   2 ** 3   #这里的阶乘很有用的！<br />   <font style="BACKGROUND-COLOR: #a9a9a9">8<br /></font>   注：复数可以查找CPAN Math::Complex模块。<br /><br />文本<br />   单引号<br />      注：单引号的字符串不能使用转义和变量。<br />      例：'hello\n'<br />            <font style="BACKGROUND-COLOR: #808080">hello\n<br /></font>   <br />   双引号使用的转义符<br />      形式                转义 <br />      \n                     newline<br />      \r                     回车<br />      \t                     tab<br />      \f                     换纸<br />      \b                     退格键<br />      \a                     bell<br />      \e                     Escape建<br />      \007                 八进制数<br />      \x7F                 十六进制数<br />      \cC                  控制字符<br />      \\                     \<br />      \"                     "<br />      \l                     下一个字符转换为小写<br />      \L                     到\E结束的所有的字符转换为小写<br />      \u                     下一个字符转换为大写<br />      \U                     到\E结束的所有的字符转换为大写<br />      \Q                     到\E结束的所有的字符中不是英文单词的加转义符。<br />                                 例：print "a \Qfd d %\E";<br />                                          <font style="BACKGROUND-COLOR: #808080">a fd\ d\ \%</font><br />      \E                     \L,\U,\Q的结束符。<img src ="http://www.blogjava.net/ivanwan/aggbug/42222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-20 20:56 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/20/42222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl是一个系统工具调用的魔术师</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/20/42206.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 20 Apr 2006 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/20/42206.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/42206.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/20/42206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/42206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/42206.html</trackback:ping><description><![CDATA[一段perl代码：<br />   #!/usr/bin/perl -w<br />   @lines = `perldoc -u -f atan2`;<br />上面的代码可以调用perl的perldoc工具并且返回所有的系统信息。真是太神了！<img src ="http://www.blogjava.net/ivanwan/aggbug/42206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-20 18:15 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/20/42206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl获取系统有关语言的信息</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/18/41741.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 18 Apr 2006 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/18/41741.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41741.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/18/41741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41741.html</trackback:ping><description><![CDATA[
		<p>use POSIX qw/locale_h/；<br /><br /><br /><br />##       获取有关钱币，时间，符号的信息。<br />$locale_values = localeconv();</p>
		<p>for (sort keys %$locale_values) {<br />    printf "%-20s = %s\n", $_, $locale_values-&gt;{$_};<br />}<br /><br />##      获取语言的所有信息<br /><br />## 有LC_ALL, LANGUAGE, LC_CTYPE, LC_COLLATE,<br />## LC_MONETARY, LC_NUMBERIC, LC_TIME,<br />## LANG这个要捕捉错误,因为有的系统没有设.<br />$old_locale = setlocale(LC_ALL);<br />print $old_locale;</p>
<img src ="http://www.blogjava.net/ivanwan/aggbug/41741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-18 20:39 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/18/41741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perlIO对中文的支持</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/18/41739.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 18 Apr 2006 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/18/41739.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41739.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/18/41739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41739.html</trackback:ping><description><![CDATA[
		<p>其实perl对国际化非常的支持，例如在windows下读入一个gbk(cp936)的文本,然后要转化为utf8的文本输出，代码如下：<br /><br />use Encode;<br /><br />use Encode::CN;      #最后包含这个包，以为对以后编译有好处。<br /><br />use PerlIO;      # 同上<br /><br /><br /><br /><br />open(FILE, "&lt;:encoding(gbk)", "gbk.txt");      # 这里自动解码成utf8<br />@lines = &lt;FILE&gt;;<br /> close(FILE);</p>
		<p>    <br /><br />open(F, "&gt;:utf8", "utf.txt");      # 自动编码成utf8.<br />print F @lines;<br />close(F);<br /><br /><br />这样可以省得再打开以后在编码。</p>
<img src ="http://www.blogjava.net/ivanwan/aggbug/41739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-18 20:34 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/18/41739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl2exe成功编译wxperl</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/18/41736.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 18 Apr 2006 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/18/41736.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41736.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/18/41736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41736.html</trackback:ping><description><![CDATA[
		<p>一段简单的使用wxperl的perl代码：<br /><br /><br /><br />#!/usr/bin/perl<br />#############################################################################<br />## Name:        samples/hello/hello.pl<br />## Purpose:     Hello wxPerl sample<br />## Author:      Mattia Barbon<br />## Modified by:<br />## Created:     02/11/2000<br />## RCS-ID:      $Id: hello.pl,v 1.3 2004/10/19 20:28:14 mbarbon Exp $<br />## Copyright:   (c) 2000 Mattia Barbon<br />## Licence:     This program is free software; you can redistribute it and/or<br />##              modify it under the same terms as Perl itself<br />#############################################################################</p>
		<p>
				<font style="BACKGROUND-COLOR: #7fffd4">##      这里发觉只有使用Wx,Encode,Encode::CN,File::Glob这四个模块才能通过perl2exe编译。<br /><br />##      但是还有把wxbase26u_gcc_custom.dll，wxmsw26u_adv_gcc_custom.dll，wxmsw26u_core_gcc_custom.dll<br /><br />##      拷到目录下才能运行。<br /><br />use strict;<br />use Wx;<br />use Encode;<br />use Encode::CN;<br />#use PerlIO;<br />#use POSIX;;<br />#use Getopt::Std;<br />use File::Glob;</font>
		</p>
		<p>
				<br /># every program must have a Wx::App-derive class<br />package MyApp;</p>
		<p>use vars qw(@ISA);</p>
		<p>@ISA = qw(Wx::App);</p>
		<p># this is called automatically on object creation<br />sub OnInit {<br />  my( $this ) = shift;</p>
		<p>  # create a new frame<br />  my( $frame ) = MyFrame-&gt;new();</p>
		<p>  # set as top frame<br />  $this-&gt;SetTopWindow( $frame );<br />  # show it<br />  $frame-&gt;Show( 1 );<br />}</p>
		<p>package MyFrame;</p>
		<p>use vars qw(@ISA);</p>
		<p>@ISA = qw(Wx::Frame);</p>
		<p>use Wx::Event qw(EVT_PAINT);<br /># this imports some constants<br />use Wx qw(wxDECORATIVE wxNORMAL wxBOLD);<br />use Wx qw(wxDefaultPosition);<br />use Wx qw(wxWHITE);</p>
		<p>sub new {<br />  # new frame with no parent, id -1, title 'Hello, world!'<br />  # default position and size 350, 100<br />  my( $this ) = shift-&gt;SUPER::new( undef, -1, 'Hello, world!',<br />                                   wxDefaultPosition , [350, 100] );</p>
		<p>  # create a new font object and store it<br />  $this-&gt;{FONT} = Wx::Font-&gt;new( 40, wxDECORATIVE, wxNORMAL, wxBOLD, 0 );<br />  # set background colour<br />  $this-&gt;SetBackgroundColour( wxWHITE );</p>
		<p>  $this-&gt;SetIcon( Wx::GetWxPerlIcon() );</p>
		<p>  # declare that all paint events will be handled with the OnPaint method<br />  EVT_PAINT( $this, \&amp;OnPaint );</p>
		<p>  return $this;<br />}</p>
		<p>sub OnPaint {<br />  my( $this, $event ) = @_;<br />  # create a device context (DC) used for drawing<br />  my( $dc ) = Wx::PaintDC-&gt;new( $this );</p>
		<p>  # select the font<br />  $dc-&gt;SetFont( $this-&gt;font );<br />  # darw a friendly message<br />  $dc-&gt;DrawText( 'Hello, world!', 10, 10 );<br />}</p>
		<p>sub font {<br />  $_[0]-&gt;{FONT};<br />}</p>
		<p>package main;</p>
		<p># create an instance of the Wx::App-derived class<br />my( $app ) = MyApp-&gt;new();<br /># start processing events<br />$app-&gt;MainLoop();</p>
		<p># Local variables: #<br /># mode: cperl #<br /># End: #<br /><br /><br />我现在还不知是为什么。如果有哪位高手知道，告诉小弟一声。<br /><br />谢谢！</p>
<img src ="http://www.blogjava.net/ivanwan/aggbug/41736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-18 20:27 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/18/41736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Getopt::Std 的命令行开关</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/18/41593.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 18 Apr 2006 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/18/41593.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41593.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/18/41593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41593.html</trackback:ping><description><![CDATA[
		<img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10" />
		<table class="no-print" align="right" border="0" cellpadding="0" cellspacing="0" width="160">
				<tbody>
						<tr>
								<td width="10">
										<img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10" />
								</td>
								<td>
										<table border="0" cellpadding="0" cellspacing="0" width="150">
												<tbody>
														<tr>
																<td class="v14-header-1-small">文档选项</td>
														</tr>
												</tbody>
										</table>
										<table class="v14-gray-table-border" border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td class="no-padding" width="150">
																		<img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="8" />
																		<input value="设计程序的用户界面可能很困难而且耗时。Teodor Zlatanov 讨论了如何使用 Parse::RecDescent 模块来用简单的英语创建用户界面文法。他还展示了向程序添加功能或从程序除去功能时，更改文法是如何的方便。另外还与标准的 CLI 解析器和 GUI 进行了比较，讨论了这种方法的优缺点。" name="body" type="hidden" />
																		<input name="subject" value="功能丰富的 Perl: 编写说英语的 Perl 程序" type="hidden" />
																		<input name="lang" value="cn" type="hidden" />
																		<table border="0" cellpadding="0" cellspacing="0" width="143">
																				<form action="https://www-128.ibm.com/developerworks/secure/email-it.jsp" name="email">
																				</form>
																				<script language="JavaScript" type="text/javascript">
																						<!--
document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>将此页作为电子邮件发送</b></a></p></td></tr>');
//-->
																				</script>
																				<tbody>
																						<tr valign="top">
																								<td width="8">
																										<img src="http://www.ibm.com/i/c.gif" alt="" height="1" width="8" />
																								</td>
																								<td width="16">
																										<img src="http://www.ibm.com/i/v14/icons/em.gif" alt="将此页作为电子邮件发送" height="16" vspace="3" width="16" />
																								</td>
																								<td width="122">
																										<p>
																												<a class="smallplainlink" href="javascript:document.email.submit();">
																														<b>将此页作为电子邮件发送</b>
																												</a>
																										</p>
																								</td>
																						</tr>
																						<noscript>
																								<tr valign="top">
																										<td width="8">
																												<img alt="" height="1" width="8" src="//www.ibm.com/i/c.gif" />
																										</td>
																										<td width="16">
																												<img alt="" width="16" height="16" src="//www.ibm.com/i/c.gif" />
																										</td>
																										<td class="small" width="122">
																												<p>
																														<span class="ast">未显示需要 JavaScript
的文档选项</span>
																												</p>
																										</td>
																								</tr>
																						</noscript>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
										<!-- 03/20/06 updated by gretchen -->
										<br />
										<table border="0" cellpadding="0" cellspacing="0" width="150">
												<tbody>
														<tr>
																<td class="v14-header-2-small">最新推荐</td>
														</tr>
												</tbody>
										</table>
										<table class="v14-gray-table-border" border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td class="no-padding" width="150">
																		<table border="0" cellpadding="0" cellspacing="0" width="143">
																				<tbody>
																						<tr valign="top">
																								<td width="8">
																										<img src="http://www.ibm.com/i/c.gif" alt="" height="1" width="8" />
																								</td>
																								<td>
																										<img src="http://www.ibm.com/i/v14/icons/fw_bold.gif" alt="" border="0" height="16" vspace="3" width="16" />
																								</td>
																								<td width="125">
																										<p>
																												<a href="http://www-128.ibm.com/developerworks/cn/kickstart/" class="smallplainlink">Java 应用开发源动力 － 下载免费软件，快速启动开发</a>
																										</p>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
										<br />
								</td>
						</tr>
				</tbody>
		</table>
		<a name="N1005F">
				<span class="atitle">用传统的 Unix 方式创建的简单用户界面</span>
		</a>
		<p>Unix 用户非常熟悉基于文本的 UI 模型。设想有一个 Perl
程序，让我们先看一下这个模型用于该程序的简单实现。标准的 Getopt::Std
模块简化了命令行参数的解析。这个程序仅仅为了说明 Getopt::Std 模块（没有实际用途）。
请参阅本文后面的参考资料。</p>
		<a name="listing1">
				<b>使用 Getopt::Std 的命令行开关</b>
		</a>
		<pre>
				<code class="section">
						<br />#!/usr/bin/perl -w<br /><br />use strict;				# always use strict, it's a good habit<br />use Getopt::Std;			# see "perldoc Getopt::Std"<br /><br />my %options;<br />getopts('f:hl', \%options);		# read the options with getopts<br /><br /># uncomment the following two lines to see what the options hash contains<br />#use Data::Dumper;<br />#print Dumper \%options;<br /><br />$options{h} &amp;&amp; usage();			# the -h switch<br /><br /># use the -f switch, if it's given, or use a default configuration filename<br />my $config_file = $options{f} || 'first.conf';<br /><br />print "Configuration file is $config_file\n";<br /><br /># check for the -l switch<br />if ($options{l})<br />{<br /> system('/bin/ls -l');<br />}<br />            else<br />{<br /> system('/bin/ls');<br />}<br /><br /># print out the help and exit<br />sub usage<br />{<br /> print &lt;&lt;EOHIPPUS;<br />first.pl [-l] [-h] [-f FILENAME]<br /><br />Lists the files in the current directory, using either /bin/ls or<br />/bin/ls -l.  The -f switch selects a different configuration file.<br />The -h switch prints this help.<br />EOHIPPUS<br />exit;<br />}       <br /></code>
		</pre>
<img src ="http://www.blogjava.net/ivanwan/aggbug/41593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-18 10:34 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/18/41593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl的对中文的支持</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/15/41280.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sat, 15 Apr 2006 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/15/41280.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41280.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/15/41280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41280.html</trackback:ping><description><![CDATA[大家经常使用正则表达式的字符集从字符串中抽取或排除中文字符，但是这样做<br />很费事，效果也并不是很理想。实际上Perl从5.6开始已经开始在内部使用utf8编码<br />来表示字符，也就是说对中文以及其他语言字符的处理应该是完全没有问题的。关键<br />在于目前使用的编辑器以及文件格式并不都能很好地支持utf8，委屈了Perl的强大能力。<br />实际上我们只需要利用好Encode这个模块便能充分发挥Perl的utf8字符的优势了。<br /><br />    下面就以中文文本的处理为例进行说明（注意：编辑下面这段程序不能用使用utf8<br />编码的编辑器），比如有一个字符串"测试文本"，我们想要把这个中文字符串拆成单个<br />字符，可以这样写：<br />use Encode;<br />use Encode::CN; #可写可不写<br />$dat="测试文本";<br />$str=decode("gb2312",$dat);<br />@chars=split //,$str;<br />foreach $char (@chars) {<br />        print encode("gb2312",$char),"\n";<br />}<br />结果大家试一试就知道了，应该是令人满意的。<br /><br />    这里主要用到了Encode模块的decode、encode函数。要了解这两个函数的作用我们<br />需要清楚几个概念：<br />1、Perl字符串是使用utf8编码的，它由Unicode字符组成而不是单个字节，每个utf8编<br />码的Unicode字符占1~4个字节（变长）。<br />2、进入或离开Perl处理环境（比如输出到屏幕、读入和保存文件等等）时不是直接使用<br />Perl字符串，而需要把Perl字符串转换成字节流，转换过程中使用何种编码方式完全取决<br />于你（或者由Perl代劳）。一旦Perl字符串向字节流的编码完成，字符的概念就不存在了<br />，变成了纯粹的字节组合，如何解释这些组合则是你自己的工作。<br /><br />    我们可以看出如果想要Perl按照我们的字符概念来对待文本，文本数据就需要一直用<br />Perl字符串的形式存放。但是我们平时写出的每个字符一般都被作为纯ASCII字符保存（<br />包括在程序中明文写出的字符串），也就是字节流的形式，这里就需要encode和decode函<br />数的帮助了。<br /><br />    encode函数顾名思义是用来编码Perl字符串的。它将Perl字符串中的字符用指定的编<br />码格式编码，最终转化为字节流的形式，因此和Perl处理环境之外的事物打交道经常需要<br />它。其格式很简单：<br />        $octets = encode(ENCODING, $string [, CHECK])<br />这里$string是Perl字符串，ENCODING是给定的编码方式，$octets则是编码之后的字节流<br />，CHECK表示转换时如何处理畸变字符（也就是Perl认不出来的字符）。一般不需要使用<br />CHECK，让Perl按默认规则处理即可。<br />    编码方式视语言环境的不同有很大变化，默认可以识别utf8、ascii、ascii-ctrl、<br />iso-8859-1等，中文环境（CN）增加了euc-cn（gb2312与之等价）、cp936（gbk与之等价<br />）、hz等，还有日文环境（JP）、韩文（KR）等等，在此不一一尽数。<br /><br />    decode函数则是用来解码字节流的。它按照你给出的编码格式解释给定的字节流，将<br />其转化为使用utf8编码的Perl字符串，一般来说从终端或者文件取得的文本数据都应该用<br />decode转换为Perl字符串的形式。它的格式为：<br />        $string = decode(ENCODING, $octets [, CHECK])<br />$string、ENCODING、$octets和CHECK的含义同上。<br /><br />    现在就很容易理解上面写的那段程序了。因为字符串是用明文写出的，存放的时候已<br />经是字节流形式，丧失了本来的意义，所以首先就要用decode函数将其转换为Perl字符串<br />，由于汉字一般都用gb2312格式编码，这里decode也要使用gb2312编码格式。转换完成后<br />Perl对待字符的行为就和我们一样了，平时对字符串进行操作的函数基本上都能正确对字<br />符进行处理，除了那些本来就把字符串当成一堆字节的函数（如vec、pack、unpack等）。<br />于是split就能把字符串切成单个字符了。最后由于在输出的时候不能直接使用utf8编码<br />的字符串，还需要将切割后的字符用encode函数编码为gb2312格式的字节流，再用print<br />输出。<br /><br />    Encode模块的初步应用大概就是这样，详细情况还是要参阅模块的文档。实际上如果<br />我们使用UltraEditor等等支持编辑utf8编码文件的编辑器写程序，基本上用不着Encode<br />模块，在程序开头加上一句use utf8就行。这时Perl默认包括程序本身在内的所有的字符<br />都是Unicode字符，可以随便使用Unicode范围内的字符，甚至可以用非英文字符作为标识<br />符，只是输出的时候可能还需要用Encode模块。比如用UE的utf8编码模式编辑这个程序：<br />        use utf8;<br />        $单价=10;<br />        $数量=100;<br />        $总额=$单价*$数量;<br />        print "$总额\n";<br />可以在Perl 5.6以后的版本中正常运行并给出结果，是不是很爽？:) 这种模式最大的优点<br />就是在字符串中可以混合多种语言的文字，就算中日韩英加上阿拉伯字符都在一个字符串<br />中出现也没问题；不像使用Encode模块那样必须固定一种编码方式，中日韩英字符同时出<br />现还好办，因为gbk包含了所有这些字符，可是再加上一些非亚洲语言字符就不一定能处<br />理了。所以以后用Unicode编码应该是大势所趋。<br /><br />希望写的这些能对大家有所帮助。<br /><img src ="http://www.blogjava.net/ivanwan/aggbug/41280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-15 22:50 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/15/41280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以适当的方式运行die函数</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/14/41075.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Fri, 14 Apr 2006 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/14/41075.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/41075.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/14/41075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/41075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/41075.html</trackback:ping><description><![CDATA[在P e r l中，d i e函数可以用来在出现错误的时候停止解释程序的运行，并输出一条有意义的<br />出错消息。正如你在前面已经看到的那样，只要调用d i e函数，就能够输出类似下面的消息：<br /><em>   died at scriptname line xxx</em><br /><br />d i e函数也可以带有一系列的参数，这些参数将取代默认消息而被输出。如果消息的后面<br />没有换行符，那么消息的结尾就附有at scriptname line xxx字样：<br />   die "Cannot open";   #prints "Cannot open at scriptname <em>scriptname line xxx</em>"<br /><br />P e r l中有一个特殊的变量$ !，它总是设置为系统需要的最后一个操作（比如磁盘输入或输<br />出）的出错消息。当$ !用于数字上下文时，它返回一个错误号，这个号可能对任何人都没有<br />什么用处。在字符串上下文中， $ !返回来自你的操作系统的相应的出错消息：<br />   open(MYFILE, "myfile") || die "Cannot open myfile: $!\n";<br /><br /><strong><font color="#ff0000">不要使用$ !的值来检查系统函数的运行是失败还是成功。只有当系统执<br />行一项操作（比如文件输入或输出）之后， $ !才有意义，并且只有在该操作<br />运行失败后， $ !才被设置。在其他时间中， $ !的值几乎可以是任何东西，并<br />且是毫无意义的。</font></strong><br /><br />不过有时并不想使程序停止运行，只是想要发出一个警告。若要创建这样的警告， P e r l有<br />一个w a r n函数可供使用。w a r n的运行方式与d i e完全一样，你可以从下面这个代码中看出来，不过差别是它的程序将保持运行状态：<br />   if(! open(MYFILE, "output)) {<br />      warn "cannot read output: $!";<br />   } else {<br />      ;   # Reading output...<br />   }<br /><img src ="http://www.blogjava.net/ivanwan/aggbug/41075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-14 13:15 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/14/41075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个一个字符处理字符串</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/09/40065.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 09 Apr 2006 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/09/40065.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/40065.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/09/40065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/40065.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/40065.html</trackback:ping><description><![CDATA[1.split函数<br /><br />   %seen = ( );<br />   $string = "an apple a day";<br />   foreach $char (split //, $string) {<br />       $seen{$char}++;<br />   }<br /><br />2./(.)/g 但是(.)永远不会是newline<br />   %seen = ( );<br />   $string = "an apple a day";<br />   while ($string =~ /(.)/g) {<br />       $seen{$1}++;<br />   }<br /><br />3.unpack("C*")也可以逐个处理字符:(这个例子是累加字符串里每个字符ascii码的累加值)<br />   $sum = 0;<br />   foreach $byteval (unpack("C*", $string)) {<br />       $sum += $byteval;<br />   }<br />   print "sum is $sum\n";<br />   # prints "1248" if $string was "an apple a day"<br /><br />$sum = unpack("%32C*", $string); #这个方法比上面更快,这个返回32位的checksum值.<br /><br />4 .&lt;&gt;是默认的输入流,其实就是ARGV.<br />     这个模拟sysv的checksum程序:<pre>   #!/usr/bin/perl
   # sum - compute 16-bit checksum of all input files
   $checksum = 0;
   while (&lt;&gt;) { $checksum += unpack("%16C*", $_) }
   $checksum %= (2 ** 16) - 1;
   print "$checksum\n";<br />   <br /><p class="docText">   Here's an example of its use:</p><pre>   % perl sum /etc/termcap
<b><span class="docEmphasis">   1510</span></b></pre><p class="docText"><br />   If you have the GNU version of <span class="docEmphasis">sum</span>, you'll need to call it with the <span class="docEmphBold">—sysv</span> option to get the same answer on the same file.</p><pre>   % sum --sysv /etc/termcap
<b><span class="docEmphasis">   1510 851 /etc/termcap</span></b></pre><br />一个详细的例子：<br /><br /><br /><br /> #!/usr/bin/perl
  # slowcat - emulate a   s l o w   line printer
  # usage: slowcat [-DELAY] [files ...]
  $DELAY = ($ARGV[0] =~ /^-([.\d]+)/) ? (shift, $1) : 1; #这里[.]取消了.的特殊性。使其为一般意义。shift移除了@ARGV第一个变量和长度减一。
  $| = 1; #不为0就强行清空输出或打印。
  while (&lt;&gt;) {  #&lt;&gt;为@ARGV指定的文件句柄
      for (split(//)) {
          print;
          select(undef,undef,undef, 0.005 * $DELAY);  #select函数设置屏幕输出。这里是设置延迟。
      }
  }<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></pre><img src ="http://www.blogjava.net/ivanwan/aggbug/40065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-09 11:16 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/09/40065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl中对中文编码的支持</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/06/39635.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 06 Apr 2006 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/06/39635.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/39635.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/06/39635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/39635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/39635.html</trackback:ping><description><![CDATA[
		<p>
				<a name="__index__">
				</a>
		</p>
		<!-- INDEX BEGIN -->
		<!--

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#_铐鈅漩痤鋉噔�">额外的中文编码</a></li>
		<li><a href="#_____漯屣_">进一步的信息</a></li>
		<li><a href="#灬___perl__牯__漤_">提供 Perl 资源的网址</a></li>
		<li><a href="#馹颻_perl__漤_">学习 Perl 的网址</a></li>
		<li><a href="#perl_阓筱踹___�">Perl 使用者集会</a></li>
		<li><a href="#unicode_镟__">Unicode 相关网址</a></li>
	</ul>

	<li><a href="#see_also">SEE ALSO</a></li>
	<li><a href="#authors">AUTHORS</a></li>
</ul>
-->
		<!-- INDEX END -->
		<p>
		</p>
		<h1>
				<a name="name">NAME</a>
		</h1>
		<p>perlcn - 简体中文 Perl 指南</p>
		<p>
		</p>
		<hr />
		<h1>
				<a name="description">DESCRIPTION</a>
		</h1>
		<p>欢迎来到 Perl 的天地!</p>
		<p>从 5.8.0 版开始, Perl 具备了完善的 Unicode (统一码) 支援,
也连带支援了许多拉丁语系以外的编码方式; CJK (中日韩) 便是其中的一部份.
Unicode 是国际性的标准, 试图涵盖世界上所有的字符: 西方世界, 东方世界,
以及两者间的一切 (希腊文, 叙利亚文, 亚拉伯文, 希伯来文, 印度文,
印地安文, 等等). 它也容纳了多种作业系统与平台 (如 PC 及麦金塔).</p>
		<p>Perl 本身以 Unicode 进行操作. 这表示 Perl 内部的字符串数据可用 Unicode
表示; Perl 的函式与算符 (例如正规表示式比对) 也能对 Unicode 进行操作.
在输入及输出时, 为了处理以 Unicode 之前的编码方式存放的数据, Perl
提供了 Encode 这个模块, 可以让你轻易地读取及写入旧有的编码数据.</p>
		<p>Encode 延伸模块支援下列简体中文的编码方式 ('gb2312' 表示 'euc-cn'):</p>
		<pre>    euc-cn      Unix 延伸字符集, 也就是俗称的国标码<br />    gb2312-raw  未经处理的 (低比特) GB2312 字符表<br />    gb12345     未经处理的中国用繁体中文编码<br />    iso-ir-165  GB2312 + GB6345 + GB8565 + 新增字符<br />    cp936       字码页 936, 也可以用 'GBK' (扩充国标码) 指明<br />    hz          7 比特逸出式 GB2312 编码</pre>
		<p>举例来说, 将 EUC-CN 编码的档案转成 Unicode, 祗需键入下列指令:</p>
		<pre>    perl -Mencoding=euc-cn,STDOUT,utf8 -pe1 &lt; file.euc-cn &gt; file.utf8</pre>
		<p>Perl 也内附了 ``piconv'', 一支完全以 Perl 写成的字符转换工具程序, 用法如下:</p>
		<pre>    piconv -f euc-cn -t utf8 &lt; file.euc-cn &gt; file.utf8<br />    piconv -f utf8 -t euc-cn &lt; file.utf8 &gt; file.euc-cn</pre>
		<p>另外, 利用 encoding 模块, 你可以轻易写出以字符为单位的程序码, 如下所示:</p>
		<pre>    #!/usr/bin/env perl<br />    # 启动 euc-cn 字串解析; 标准输出入及标准错误都设为 euc-cn 编码<br />    use encoding 'euc-cn', STDIN =&gt; 'euc-cn', STDOUT =&gt; 'euc-cn';<br />    print length("骆驼");            #  2 (双引号表示字符)<br />    print length('骆驼');            #  4 (单引号表示字节)<br />    print index("谆谆教诲", "蛔唤"); # -1 (不包含此子字符串)<br />    print index('谆谆教诲', '蛔唤'); #  1 (从第二个字节开始)</pre>
		<p>在最后一列例子里, ``谆'' 的第二个字节与 ``谆'' 的第一个字节结合成 EUC-CN
码的 ``蛔''; ``谆'' 的第二个字节则与 ``教'' 的第一个字节结合成 ``唤''.
这解决了以前 EUC-CN 码比对处理上常见的问题.</p>
		<p>
		</p>
		<h2>
				<a name="_铐鈅漩痤鋉噔�">额外的中文编码</a>
		</h2>
		<p>如果需要更多的中文编码, 可以从 CPAN (<a href="http://www.cpan.org/">http://www.cpan.org/</a>) 下载
Encode::HanExtra 模块. 它目前提供下列编码方式:</p>
		<pre>    gb18030     扩充过的国标码, 包含繁体中文</pre>
		<p>另外, Encode::HanConvert 模块则提供了简繁转换用的两种编码:</p>
		<pre>    big5-simp   Big5 繁体中文与 Unicode 简体中文互转<br />    gbk-trad    GBK 简体中文与 Unicode 繁体中文互转</pre>
		<p>若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.pl 与 g2b.pl 两支程序,
或在程序内使用下列写法:</p>
		<pre>    use Encode::HanConvert;<br />    $euc_cn = big5_to_gb($big5); # 从 Big5 转为 GBK<br />    $big5 = gb_to_big5($euc_cn); # 从 GBK 转为 Big5</pre>
		<p>
		</p>
		<h2>
				<a name="_____漯屣_">进一步的信息</a>
		</h2>
		<p>请参考 Perl 内附的大量说明文件 (不幸全是用英文写的), 来学习更多关于
Perl 的知识, 以及 Unicode 的使用方式. 不过, 外部的资源相当丰富:</p>
		<p>
		</p>
		<h2>
				<a name="灬___perl__牯__漤_">提供 Perl 资源的网址</a>
		</h2>
		<dl>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2eperl_2ecom_2f">
								</a>
								<a href="http://www.perl.com/">http://www.perl.com/</a>
						</strong>
						<br />
				</dt>
				<dd>
Perl 的首页 (由欧莱礼公司维护)
</dd>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2ecpan_2eorg_2f">
								</a>
								<a href="http://www.cpan.org/">http://www.cpan.org/</a>
						</strong>
						<br />
				</dt>
				<dd>
Perl 综合典藏网 (Comprehensive Perl Archive Network)
</dd>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2flists_2eperl_2eorg_2f">
								</a>
								<a href="http://lists.perl.org/">http://lists.perl.org/</a>
						</strong>
						<br />
				</dt>
				<dd>
Perl 邮递论坛一览
</dd>
		</dl>
		<p>
		</p>
		<h2>
				<a name="馹颻_perl__漤_">学习 Perl 的网址</a>
		</h2>
		<dl>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2eoreilly_2ecom_2ecn_2fhtml_2fper">
								</a>
								<a href="http://www.oreilly.com.cn/html/perl.html">http://www.oreilly.com.cn/html/perl.html</a>
						</strong>
						<br />
				</dt>
				<dd>
简体中文版的欧莱礼 Perl 书藉
</dd>
		</dl>
		<p>
		</p>
		<h2>
				<a name="perl_阓筱踹___�">Perl 使用者集会</a>
		</h2>
		<dl>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2epm_2eorg_2fgroups_2fasia_2eshtm">
								</a>
								<a href="http://www.pm.org/groups/asia.shtml#China">http://www.pm.org/groups/asia.shtml#China</a>
						</strong>
						<br />
				</dt>
				<dd>
中国 Perl 推广组一览
</dd>
		</dl>
		<p>
		</p>
		<h2>
				<a name="unicode_镟__">Unicode 相关网址</a>
		</h2>
		<dl>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2eunicode_2eorg_2f">
								</a>
								<a href="http://www.unicode.org/">http://www.unicode.org/</a>
						</strong>
						<br />
				</dt>
				<dd>
Unicode 学术学会 (Unicode 标准的制定者)
</dd>
				<dt>
						<strong>
								<a name="item_http_3a_2f_2fwww_2ecl_2ecam_2eac_2euk_2f_257emgk25">
								</a>
								<a href="http://www.cl.cam.ac.uk/%7Emgk25/unicode.html">http://www.cl.cam.ac.uk/%7Emgk25/unicode.html</a>
						</strong>
						<br />
				</dt>
				<dd>
Unix/Linux 上的 UTF-8 及 Unicode 答客问
</dd>
		</dl>
		<p>
		</p>
		<hr />
		<h1>
				<a name="see_also">SEE ALSO</a>
		</h1>
		<p>
				<a href="http://www.mathematik.uni-ulm.de/help/perl5/doc/Encode.html">the Encode manpage</a>, <a href="http://www.mathematik.uni-ulm.de/help/perl5/doc/Encode/CN.html">the Encode::CN manpage</a>, <a href="http://www.mathematik.uni-ulm.de/help/perl5/doc/encoding.html">the encoding manpage</a>, <a href="http://www.mathematik.uni-ulm.de/help/perl5/doc/perluniintro.html">the perluniintro manpage</a>, <a href="http://www.mathematik.uni-ulm.de/help/perl5/doc/perlunicode.html">the perlunicode manpage</a></p>
		<p>
		</p>
		<hr />
		<h1>
				<a name="authors">AUTHORS</a>
		</h1>
		<p>Jarkko Hietaniemi &lt;<a href="mailto:jhi@iki.fi">jhi@iki.fi</a>&gt;</p>
		<p>Autrijus Tang (唐宗汉) &lt;<a href="mailto:autrijus@autrijus.org">autrijus@autrijus.org</a>&gt;</p>
<img src ="http://www.blogjava.net/ivanwan/aggbug/39635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-06 17:19 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/06/39635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符与整数之间相互转换</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/06/39615.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 06 Apr 2006 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/06/39615.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/39615.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/06/39615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/39615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/39615.html</trackback:ping><description><![CDATA[1.ord函数<br />    $num  = ord($char); #把字符转换为整数<br />2.chr函数<br />    $char = chr($num); #把整数转换为字符<br />3.printf函数<br />    printf("Number %d is character %c\n", 101, 101); #格式化输出一个整数和字符.<br />    printf "%vd\n", "fac\x{0327}ade";
<br />        <b><span class="docEmphasis">102.97.99.807.97.100.101</span></b><br />    printf "%vx\n", "fac\x{0327}ade";
<br />        <b><span class="docEmphasis">66.61.63.327.61.64.65</span></b><br />    <b><span class="docEmphasis"><br /></span></b>   <br /><br />4.unpack函数(C*把一个字符串转换为byte数组)(U*是指定的unicode)<br />    @ascii_character_numbers = unpack("C*", "sample");
<br />    print "@ascii_character_numbers\n";
<br />        <b><span class="docEmphasis">115 97 109 112 108 101<br /></span></b><br />5.pack函数(C*把一个byte数组转换为一个字符串)<br />    $word = pack("C*", @ascii_character_numbers);
<br />    $word = pack("C*", 115, 97, 109, 112, 108, 101);   # same
print "$word\n";
<b><span class="docEmphasis"><br />        sample<br /></span></b><img src ="http://www.blogjava.net/ivanwan/aggbug/39615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-06 16:27 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/06/39615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建立一个默认值</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/06/39586.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 06 Apr 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/06/39586.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/39586.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/06/39586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/39586.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/39586.html</trackback:ping><description><![CDATA[1.使用||来建立默认值<br />    $foo = $bar || "DEFAULT VALUE"; #如果$bar没有值的话就使用"DEFAULT VALUE"作为$foo的值.<br /><br /><pre>	$dir = shift(@ARGV) || "/tmp"; #如果没有参数,,就返回"/tmp".<br />	$dir = defined($ARGV[0]) ? shift(@ARGV) : "/tmp";	<br /><br />2.shift函数:<br />	移出第一个数组元素,并返回.<br /></pre><br />3.defined函数:<br />    判断一个变量、数组或数组的一个元素是否已经被赋值。expr为变量名、数组名或一个数组元素。如果已定义，返回真，否则返回假。<br /><br />4. if和unless<br />    注:if和unless意思相反!<br /> $a = $b if $a;     #如果$a为真$a赋值为$b<br /> $a = $b unless $a  #如果$a为假$a赋值为$b<img src ="http://www.blogjava.net/ivanwan/aggbug/39586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-06 14:55 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/06/39586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl中的字符串函数</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/04/39180.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 04 Apr 2006 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/04/39180.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/39180.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/04/39180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/39180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/39180.html</trackback:ping><description><![CDATA[1.<span id="ArticleContent1_ArticleContent1_lblContent">一旦我们读出了一个记录，通常打算去掉记录分隔符，(缺省值为换行符字符)： <br /><br /></span>    chomp($n = &lt;STDIN&gt;);<br /><br />注:<span id="ArticleContent1_ArticleContent1_lblContent">Perl 4.0版本仅有chop()操作，去掉串的最后一个字符, 不管该字符是什么。chomp() 没有这么大的破坏性，如果有行分隔符存在，它仅去掉行分隔符。如果你打算去掉行分隔符，就用chomp() 来代替chop()。<br /><br />2.</span><tt>q//</tt>和<tt>qq//前面一个是加单引号,后面一个是加双引号.</tt><tt>匹配形式是 /regex/</tt> 而直接运行命令是(<tt>$x</tt><tt>=</tt><tt>`cmd`</tt>).<br /><pre>	$string = q[Jon 'Maddog' Orwant];   # literal single quotes<br />	$string = q{Jon 'Maddog' Orwant};   # literal single quotes<br />	$string = q(Jon 'Maddog' Orwant);   # literal single quotes<br />	$string = q&lt;Jon 'Maddog' Orwant&gt;;   # literal single quotes<br /><br />3.特殊字符包括 "<tt>\n</tt>" (新行), "<tt>\033</tt>" (八进制数的字符33), "<tt>\cJ</tt>" (Ctrl-J), "<tt>\x1B</tt>" (十六进制的字符<br /> 0x1B).<br /><br />4.直接输入多行:	 <br />	$a = &lt;&lt;"EOF";	#指明了EOF为结束符<br />	This is a multiline here document<br />	terminated by EOF on a line by itself<br />	EOF<br />5.prinf函数<br />	$char = chr(0x394);<br />	$code = ord($char);<br />	printf "char %s is code %d, %#04x\n", $char, $code, $code; # %#04x表示占四位十六进制数少的话用0补齐<br /><br /><b><span class="docEmphasis">char</span></b><font face="symbol">D</font><b><span class="docEmphasis">is code 916, 0x394<br /></span></b></pre><br />6.substr函数<br />substr函数形式如下:<br />    $value = substr($string, $offset, $count);
<br />    $value = substr($string, $offset);

    <br />    substr($string, $offset, $count) = $newstring;
<br />    substr($string, $offset, $count, $newstring);  # 和前面一样<br />    substr($string, $offset)         = $newtail;<br /><br />    $string = "This is what you have";<br />    # you can test substrings with =~
<br />    if (substr($string, -10) =~ /pattern/) {
            <br />        print "Pattern matches in last 10 characters\n";
<br />    }

<br />    # substitute "at" for "is", restricted to first five characters
<br />    substr($string, 0, 5) =~ s/is/at/g;<br /><br />    # exchange the first and last letters in a string
$a = "make a hat";
        <br />    (substr($a,0,1), substr($a,-1)) = 
(substr($a,-1),  substr($a,0,1));
<br />    print $a;
<br />    <b><span class="docEmphasis">    take a ham<br /></span></b><br />7.unpack函数<br />    # extract column with unpack
<br />    $a = "To be or not to be";
$b = unpack("x6 A6", $a);   # skip 6, grab 6
print $b;
<b><span class="docEmphasis"><br />        or not</span></b><img src ="http://www.blogjava.net/ivanwan/aggbug/39180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-04 16:02 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/04/39180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl中的真和假</title><link>http://www.blogjava.net/ivanwan/archive/2006/04/04/39179.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 04 Apr 2006 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/04/04/39179.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/39179.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/04/04/39179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/39179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/39179.html</trackback:ping><description><![CDATA[perl中的undef,false和0是属于假的一方;其他的属于真.<img src ="http://www.blogjava.net/ivanwan/aggbug/39179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-04-04 15:58 <a href="http://www.blogjava.net/ivanwan/archive/2006/04/04/39179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>