﻿<?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-小小程序员</title><link>http://www.blogjava.net/yuoveyu/</link><description>小小程序员</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:04:49 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:04:49 GMT</pubDate><ttl>60</ttl><item><title>sudo的环境变量获取</title><link>http://www.blogjava.net/yuoveyu/archive/2011/06/21/352708.html</link><dc:creator>余坚</dc:creator><author>余坚</author><pubDate>Tue, 21 Jun 2011 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/yuoveyu/archive/2011/06/21/352708.html</guid><wfw:comment>http://www.blogjava.net/yuoveyu/comments/352708.html</wfw:comment><comments>http://www.blogjava.net/yuoveyu/archive/2011/06/21/352708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuoveyu/comments/commentRss/352708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuoveyu/services/trackbacks/352708.html</trackback:ping><description><![CDATA[<div>sudo的环境变量获取<br />问题描述:<br />&nbsp;&nbsp; &nbsp;yuyu用户设置了自定义的环境变量，提升到sudo执行，无法获取该环境变量<br />解决方法:<br />&nbsp;&nbsp;&nbsp; 在/etc/sudoers.d目录下添加任意文件，前提是不包括～结尾和.字符,权限要设置成440，具体要求看改目录下的README文件<br />&nbsp;&nbsp;&nbsp; 文件内容Defaults env_keep += "CONFIG_DIR"<br />以上在yuyu中设置的变量CONFIG_DIR 就能在sudo中使用</div><img src ="http://www.blogjava.net/yuoveyu/aggbug/352708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuoveyu/" target="_blank">余坚</a> 2011-06-21 10:08 <a href="http://www.blogjava.net/yuoveyu/archive/2011/06/21/352708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[源码学习]Tomcat6 源码学习</title><link>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324046.html</link><dc:creator>余坚</dc:creator><author>余坚</author><pubDate>Mon, 21 Jun 2010 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324046.html</guid><wfw:comment>http://www.blogjava.net/yuoveyu/comments/324046.html</wfw:comment><comments>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuoveyu/comments/commentRss/324046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuoveyu/services/trackbacks/324046.html</trackback:ping><description><![CDATA[Tomcat6 源码学习
<br />
2010-3-29
<br />
【tomcat启动类Bootstrap】
<br />
t1.tomcat的人口函数，启动类
<br />
org.apache.catalina.startup. Bootstrap.java&nbsp;&nbsp; Main函数
<br />
<br />
t2.Bootstrap类
<br />
初始化 ClassLoader, 然后利用 Java Reflection 调用 Catalina 类来启动 tomcat server
<br />
<br />
【tomcat扩展-日志】
<br />
a1.private static Log log = LogFactory.getLog(Bootstrap.class);
<br />
日志可以定义为private 和static
<br />
<br />
a2.只在本类中使用的方法,使用private,降低访问权限,需要的时候,再考虑重构或者提高访问权限public
<br />
<br />
a.日志打印前加if(log.isInfoEnabled())
<br />
如果代码中含有logger.debug(&#8220;string&#8221;);此类语句，尽管在log4j.xml配置文件中对该类logger的level为
ERROR，但是仍然会产生较大的内存开销，通常是所要输出的string的几十倍甚至上百倍大小，对内存开销非常大。优化方法为：使用logger进行
判断。
<br />
<br />
<br />
2010-3-30
<br />
【tomcat扩展-classloader】
<br />
a3.如果两个类属于同一个包下，但是由不同的classloader加载，那么他们也不能互访default类型方法,属性
<br />
<br />
a4.classloader:与C或C++编写的程序不同，Java程序并不是一个可执行文件，而是由许多独立的类文件组成，每一个文件基本上
对应于一个类。此外，这些类文件并非立即全部都装入内存，而是根据程序需要装入内存。ClassLoader是JVM中将类装入内存的那部分
<br />
<br />
a5.定制的ClassLoader应用:
<br />
1.在执行非置信代码之前，自动验证数字签名
<br />
2.使用用户提供的密码透明地解密代码
<br />
3.动态地创建符合用户特定需要的定制化构建类
<br />
4.任何您认为可以生成Java字节码的内容都可以集成到应用程序中
<br />
<br />
a6.findClass方法是创建定制的ClassLoader时唯一需要覆盖的方法。
<br />
ClassLoader loadClass方法
<br />
Class c = findLoadedClass(name);
<br />
if (c == null) {
<br />
&nbsp;&nbsp;&nbsp; try {
<br />
if (parent != null) {
<br />
&nbsp;&nbsp;&nbsp; c = parent.loadClass(name, false);
<br />
} else {
<br />
&nbsp;&nbsp;&nbsp; c = findBootstrapClass0(name);
<br />
}
<br />
&nbsp;&nbsp;&nbsp; } catch (ClassNotFoundException e) {
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If still not found, then invoke findClass in order
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // to find the class.
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = findClass(name);
<br />
&nbsp;&nbsp;&nbsp; }
<br />
}
<br />
<br />
a7.ClassLoader(CCL)的任务是确保代码被编译和更新。
<br />
下面描述了它的工作方式：1、当请求一个类时，先查看它是否在磁盘的当前目录或相应的子目录。
<br />
2、如果该类不存在，但源码中有，那么调用Java编译器来生成类文件。
<br />
3、如果该类已存在，检查它是否比源码旧。如果是，调用Java编译器来重新生成类文件。
<br />
4、如果编译失败，或者由于其它原因不能从现有的源码中生成类文件，返回ClassNotFoundException。
<br />
5、如果仍然没有该类，也许它在其它库中，所以调用findSystemClass来寻找该类。
<br />
6、如果还是没有，则返回ClassNotFoundException。
<br />
7、否则，返回该类。
<br />
8、调用findLoadedClass来查看是否存在已装入的类。
<br />
9、如果没有，那么采用那种特殊的神奇方式来获取原始字节。
<br />
10、如果已有原始字节，调用defineClass将它们转换成Class对象。
<br />
11、如果没有原始字节，然后调用findSystemClass查看是否从本地文件系统获取类。
<br />
12、如果resolve参数是true，那么调用resolveClass解析Class对象。
<br />
13、如果还没有类，返回ClassNotFoundException。
<br />
14、否则，将类返回给调用程序。
<br />
<br />
【tomcat启动类classloader】
<br />
t3.tomcat自定义了三个类，catalinaLoader commonLoader，sharedLoader
<br />
Common - 载入$CATALINA_HOME/common/...它们对TOMCAT和所有的WEB APP都可见
<br />
Catalina - 载入$CATALINA_HOME/server/..它们仅对TOMCAT可见，对所有的WEB APP都不可见
<br />
Shared-载入$CATALINA_HOME/shared/它们仅对所有WEB APP可见,对TOMCAT不可见（也不必见）
<br />
<br />
t4.Bootstrap通过反射初始化Catalina类，
<br />
反射调用Catalina方法setParentClassLoader，传递SharedClassloader
<br />
反射call Catalina方法load 利用server.xml中的配置初始化Service,Server,Engine,Host
<br />
反射call Catalina方法start Start the new server&nbsp; 该server是通过&nbsp;
解析xml文件生成的org.apache.catalina.core.StandardServer类
<br />
<br />
<br />
【tomcat-xml解析】
<br />
1.Tomcat取了Digester中的interface和几个Rule,并且自己实现了一些 Rule 来解析xml.
<br />
2.tomcat解析xml创建以下几个类
<br />
Server:
<br />
org.apache.catalina.core.StandardServer
<br />
Resources:
<br />
org.apache.catalina.deploy.NamingResources
<br />
Server's Listener:（ 监听server事件）
<br />
org.apache.catalina.core.AprLifecycleListener
<br />
org.apache.catalina.core.JasperListener
<br />
org.apache.catalina.mbeans.ServerLifecycleListener
<br />
org.apache.catalina.mbeans.GlobalResourcesLifecycleListener
<br />
Service:
<br />
org.apache.catalina.core.StandardService
<br />
Executor:
<br />
org.apache.catalina.core.StandardThreadExecutor
<br />
Engine:
<br />
org.apache.catalina.core.StandardEngine
<br />
Connector:
<br />
org.apache.catalina.connector.Connector
<br />
<br />
【tomcat-流程】
<br />
3.StandardServer启动StandardService，StandardService启动Connector，
<br />
Connector启动Http11Protocol，Http11Protocol启动JIoEndpoint，
<br />
JioEndpoint启动server Socket，listern 8080端口,处理http请求
<br />
<br />
4.Http11Processor
<br />
Processes HTTP requests.
<br />
由http11ConnectionHandler调用，Http11ConnectionHandler由JioEndpoint中的Work
调用
<br />
<br />
5.A connector passes the request and reponse objects to the
Container by calling the Container interface's invoke method
<br />
public void invoke(Request request, Response response)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws IOException, ServletException;
<br />
<br />
inside the invoke method ,the container loads the servlet class,call
its sevice method ,manage sessions,etc.
<br />
<br />
6.Connector 方法initialize中
<br />
// Initializa adapter
<br />
adapter = new CoyoteAdapter(this);
<br />
protocolHandler.setAdapter(adapter);
<br />
adapter通过protocolHandler(Http11Protocol)传给Http11Processor,
<br />
Http11Processor解析，create request和response,通过adapter传送给Container
<br />
<br />
7.Tomcat使用Pipeline模式在各层容器间传递请求，将请求通过管道依次通过Engine，Host，Context和
Wrapper。另外，每一个容器&nbsp;&nbsp;
<br />
都可以设置一系列的Valve去对请求进行拦 截，就像管道中的阀一样对请求的行为进行一些干涉。
<br />
<br />
<br />
2010-3-31
<br />
【tomcat-流程】
<br />
1.tomcat的pipeline/valve是标准的责任链模式,每个级别的容器中pipeline所有的valve都完成动作后会将
request/response传到下一个容器的pipeline中的valve,
<br />
这样一直传递下去直到Wrapper的BaseValve.
<br />
Ps:每个容器的BaseValve会调用下个容器的起始valve
<br />
<br />
2.StandardEngine
<br />
属性Pipeline&nbsp; pipeline = new StandardPipeline(this);
<br />
构造函数里会设置最底层的阀门
<br />
pipeline.setBasic(new StandardEngineValve());
<br />
如果需要设置新阀门处理需求，只需要调用 pipeline.addValve(Valve valve);
<br />
<br />
3.CoyoteAdapter中会执行
<br />
connector.getContainer().getPipeline().getFirst().invoke(request,
response);
<br />
该行代码会一层一层调用添加的阀门,处理下去.
<br />
<br />
2010-4-1
<br />
【tomcat-流程】
<br />
1.jk插件负责tomcat和其它http容器进行通信
<br />
<br />
2.连接器协议AJP/1.3是tomcat用来与其它http容器进行连接的协议
<br />
<br />
3.把指定Context的classloader付给当前线程。
<br />
Thread.currentThread().setContextClassLoader(context.getLoader().getClassLoader());
这样request就只看见指定的context下面的classes和jar包,而看不见tomcat本身的类。
<br />
<br />
2010-4-7
<br />
【tomcat-socke与worker线程】
<br />
/**
<br />
* Process an incoming TCP/IP connection on the specified socket.&nbsp;
Any
<br />
* exception that occurs during processing must be logged and
swallowed.
<br />
* &lt;b&gt;NOTE&lt;/b&gt;:&nbsp; This method is called from our
Connector's thread.&nbsp; We
<br />
* must assign it to our own thread so that multiple simultaneous
<br />
* requests can be handled.
<br />
* @param socket TCP socket to process
<br />
*/
<br />
synchronized void assign(Socket socket) {
<br />
// Wait for the Processor to get the previous Socket
<br />
while (available) {
<br />
try {
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wait();
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (InterruptedException e) {
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; // Store the newly available Socket and notify our thread
<br />
&nbsp;&nbsp;&nbsp; this.socket = socket;
<br />
&nbsp;&nbsp;&nbsp; available = true;
<br />
&nbsp;&nbsp;&nbsp; notifyAll();
<br />
}
<br />
<br />
/**
<br />
* Await a newly assigned Socket from our Connector, or
&lt;code&gt;null&lt;/code
<br />
* if we are supposed to shut down.
<br />
*/
<br />
private synchronized Socket await() {
<br />
// Wait for the Connector to provide a new Socket
<br />
while (!available) {
<br />
try {
<br />
wait();
<br />
} catch (InterruptedException e) {
<br />
}
<br />
}
<br />
&nbsp;&nbsp;&nbsp; // Notify the Connector that we have received this Socket
<br />
&nbsp;&nbsp;&nbsp; Socket socket = this.socket;
<br />
&nbsp;&nbsp;&nbsp; available = false;
<br />
&nbsp;&nbsp;&nbsp; notifyAll();
<br />
return (socket);
<br />
}
<br />
连接器线程调用worker类的assign类，worker类的执行线程run方法会调用await方法获取socket，通过
available变量的设置和wait/notify方法来协调彼此的操作。当连接器线程未传输socket，worker类线程就执行wait等待，
<br />
当worker类执行线程在处理忙的时候，连接器线程wait。
<br />
<img src ="http://www.blogjava.net/yuoveyu/aggbug/324046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuoveyu/" target="_blank">余坚</a> 2010-06-21 10:28 <a href="http://www.blogjava.net/yuoveyu/archive/2010/06/21/324046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[版本控制]svn命令行笔记</title><link>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324034.html</link><dc:creator>余坚</dc:creator><author>余坚</author><pubDate>Mon, 21 Jun 2010 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324034.html</guid><wfw:comment>http://www.blogjava.net/yuoveyu/comments/324034.html</wfw:comment><comments>http://www.blogjava.net/yuoveyu/archive/2010/06/21/324034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuoveyu/comments/commentRss/324034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuoveyu/services/trackbacks/324034.html</trackback:ping><description><![CDATA[svn命令行操作
<br />
<br />
1.svn update 更新 (简写up)
<br />
svn update -r 500 test.java(将版本库中的文件test.java还原到版本500)
<br />
<br />
2.svn commit -m"u" (简写ci)
<br />
提交变更的文件
<br />
<br />
3.查看文件信息svn info path
<br />
查看文件内容svn cat path
<br />
<br />
4.svn status path
<br />
会目录下的文件和子目录的状态，正常状态的则不显示，很正常，不然在项目根目录执行，将会罗列出一大堆文件了
<br />
显示的状态信息中?：表示不在svn的控制中 M：表示本地文件被修改过
C：表示本地文件与服务器文件发生冲突（如果不带-u选项,即时冲突也不会显示） A：表示预定要加入到版本库 K：表示被锁定
<br />
'!'&nbsp; 表示丢失，一般是将受控文件直接删除导致
<br />
svn st -u path&nbsp;&nbsp; -u选项表示不仅仅本地，服务器上的变更也将会显示
<br />
<br />
5.删除文件
<br />
svn delete test.java 然后再svn ci -m 'delete&#8216;，将在本地和服务器上都删除该文件
<br />
<br />
6. 添加新文件
<br />
svn add test.java(添加test.java)&nbsp; 然后再svn ci -m"add",将再服务器上添加该文件
<br />
如果不执行commit操作，服务器上将不会添加
<br />
<br />
7.svn: Commit failed (details follow):
<br />
svn: Directory '/home/yuyu/f/workspace/ouyu/WebRoot/WEB-INF/classes'
is missing
<br />
解决方法：svn update /home/yuyu/f/workspace/ouyu/WebRoot/WEB-INF/classes
<br />
<br />
8. 服务器覆盖本地文件
<br />
执行svn revert test.java命令撤销自己的修改,再执行update,
<br />
则服务器的文件会覆盖自己修改的文件。
<br />
<br />
9.svn list path(or url)
<br />
显示目标下的文件和目录列表。
<br />
<br />
10.svn diff
<br />
svn diff path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看文件的不同处(本地版本的变更比较)
<br />
svn diff -r n1:n2 path&nbsp;&nbsp; n1和n2版本的同一文件比较
<br />
<br />
11. 发生冲突
<br />
执行svn update后会紧跟选择性操作，一种直接选择解决，修改文件;
<br />
一种选择推迟解决，则之后需要执行svn resolved test.java,才能最终commit
<br />
<img src ="http://www.blogjava.net/yuoveyu/aggbug/324034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuoveyu/" target="_blank">余坚</a> 2010-06-21 10:02 <a href="http://www.blogjava.net/yuoveyu/archive/2010/06/21/324034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaio-WriteStringToFile</title><link>http://www.blogjava.net/yuoveyu/archive/2010/05/10/320474.html</link><dc:creator>余坚</dc:creator><author>余坚</author><pubDate>Mon, 10 May 2010 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/yuoveyu/archive/2010/05/10/320474.html</guid><wfw:comment>http://www.blogjava.net/yuoveyu/comments/320474.html</wfw:comment><comments>http://www.blogjava.net/yuoveyu/archive/2010/05/10/320474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuoveyu/comments/commentRss/320474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuoveyu/services/trackbacks/320474.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;cn.yu.test.io;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.DataOutputStream;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.FileOutputStream;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.FileWriter;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.OutputStreamWriter;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.PrintStream;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.PrintWriter;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.RandomAccessFile;<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;WriteStringToFile<br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@version</span><span style="color: rgb(0, 128, 0);">&nbsp;1.0<br />
&nbsp;*&nbsp;@date&nbsp;2010/5/10<br />
&nbsp;*</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;WriteStringToFile&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;aString&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello你好</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileWriter&nbsp;fw&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileWriter(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.fw.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fw.write(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fw.close();&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">默认gbk编码9字节</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">////////////////////////////////////////////////////////////////////////////<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStreamWriter&nbsp;osw&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;OutputStreamWriter(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileOutputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.osw.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">),</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">UTF-8</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.write(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.close();&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">utf-8编码&nbsp;11字节</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//////////////////////////////////////////////////////////</span><span style="color: rgb(0, 128, 0);">/</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataOutputStream&nbsp;dos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;DataOutputStream(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileOutputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.dos.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dos.writeChars(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dos.close();&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">14个字节,&nbsp;每个字符用该字符2字节的unicode表示</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//////////////////////////////////////////////////////////////<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintStream&nbsp;ps&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;PrintStream(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileOutputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.ps.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.print(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.close();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">默认gbk编码9字节</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//////////////////////////////////////////////<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;pw&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;PrintWriter(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileOutputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.pw.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.print(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.close();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">默认gbk编码9字节&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//////////////////////////////////////////////</span><span style="color: rgb(0, 128, 0);">/</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessFile&nbsp;ra&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;RandomAccessFile(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.fa.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">rw</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra.writeUTF(aString);&nbsp;</span><span style="color: rgb(0, 128, 0);">//<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra.close();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">13个字节&nbsp;,前两个直接表示一个无符号整数,值是这个字符串的字符所需要的字节数</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">////////////////////////////////////////////////<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessFile&nbsp;ra2&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;RandomAccessFile(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/out.fa2.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">rw</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra2.writeChars(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra2.close();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">14个字节,&nbsp;每个字符用该字符2字节的unicode表示</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<img src ="http://www.blogjava.net/yuoveyu/aggbug/320474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuoveyu/" target="_blank">余坚</a> 2010-05-10 13:57 <a href="http://www.blogjava.net/yuoveyu/archive/2010/05/10/320474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl记事本</title><link>http://www.blogjava.net/yuoveyu/archive/2010/05/06/320202.html</link><dc:creator>余坚</dc:creator><author>余坚</author><pubDate>Thu, 06 May 2010 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/yuoveyu/archive/2010/05/06/320202.html</guid><wfw:comment>http://www.blogjava.net/yuoveyu/comments/320202.html</wfw:comment><comments>http://www.blogjava.net/yuoveyu/archive/2010/05/06/320202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuoveyu/comments/commentRss/320202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuoveyu/services/trackbacks/320202.html</trackback:ping><description><![CDATA[<div style="margin: 6px; padding: 0px; font-family: Verdana; font-size: 10pt; color: rgb(0, 0, 0); min-height: 1100px; counter-reset: __goog_page__ 0; line-height: normal; background-color: rgb(255, 255, 255);">
<div style="margin-top: 0px; margin-bottom: 0px;">perl记事本<br />
<br />
1. 'yu' x 3&nbsp;&nbsp;&nbsp; #&nbsp; print yuyuyu<br />
<br />
2.print "yu jian ${age}s" # 加{}&nbsp; 促使变量不会变成$ages<br />
<br />
3. 4 ** 2&nbsp; #4的平方<br />
<br />
4.(1..5) # &nbsp;--&gt;(1,2,3,4,5)<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">5.qw ( yu jian's book) &nbsp;# 简洁，更少输入</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">6.($yu,$jian)=($jian,$yu) # 值互换</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">7.($yu,$jian)=qw(yu jian) # 赋值</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">8.@array=qw/yu jian/; #数组&nbsp;</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">9.@array=5..9;</div>
<div style="margin-top: 0px; margin-bottom: 0px;">$yu=pop(@array) &nbsp;# $yu=9 &nbsp;and @array=(5,6,7,8)</div>
$yu=pop @array &nbsp;# $yu=8 &nbsp;and @array=(5,6,7)<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">10.如果数组为空 pop不会报错，什么也不返回，直接返回undef<br />
<br />
</div>
11.push(@array,0) &nbsp;# @array=(5,6,7,0)<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">12.pop和push都操作数组末尾</div>
<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">13.shift和unshift是对数组的开始端操作</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">14.$_ &nbsp;perl的默认变量</div>
<div style="margin-top: 0px; margin-bottom: 0px;">for(1...10){</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;print $_; &nbsp;# $_ = 1 or 2 or 3...</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">15.perl会正确处理上下文</div>
<div style="margin-top: 0px; margin-bottom: 0px;">@people=qw{yu gao};</div>
<div style="margin-top: 0px; margin-bottom: 0px;">@list=@people #得到列表</div>
<div style="margin-top: 0px; margin-bottom: 0px;">$n=@people #得到人数2</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">16.scalar @array #scalar 导致切换为标量上下文</div>
<div style="margin-top: 0px; margin-bottom: 0px;">@array =qw/yu jian gao su/;</div>
<div style="margin-top: 0px; margin-bottom: 0px;">print "love is ".@array."\n"; #love is 4</div>
<div style="margin-top: 0px; margin-bottom: 0px;">print "love is ",@array,"\n"; #love is yujiangaosu</div>
<div style="margin-top: 0px; margin-bottom: 0px;">print "love is ".scalar @array,"\n";#love is 4</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">17.@lines=&lt;STDIN&gt; #在列表上下文中读取标准输入</div>
<br />
<br />
18.chomp 去掉所有的换行符 chmop(@lines)<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">19.调用自定义方法 &nbsp;&amp;methodName;</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">20.sub max{</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;if(@_!=2){ &nbsp;#判断参数个数</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;print "waning!!!"；<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return -1;<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;}<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;my($m,$n); #创建新的所有变量<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;($m,$n)=@_; #将参数赋值给变量<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;if($m &gt; $n){$m}else{$n}</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}<br />
<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">21.my($num)=@_ #获取数组的第一个元素</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;my $num=@_ #数组的数量</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">22.use strice ; #强制使用一些严格的良好的程序语言规则<br />
<br />
23.sub division{</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$_[0] / $_[1]; #第一个参数和第二个参数<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}<br />
<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">24.@ARGV=qw# file1 file2 #;# 强制让砖石操作符读取这两个文件</div>
<div style="margin-top: 0px; margin-bottom: 0px;">while(&lt;&gt;){</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;chomp;<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;print "It was $_\n":<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}<br />
<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">25.printf "Hello, %s; your password in %d days!\n",$user,$days;#格式化输出</div>
<div style="margin-top: 0px; margin-bottom: 0px;">%d 整数 %g 浮点数</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">27.die处理错误输出</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">28.读取文件</div>
<div style="margin-top: 0px; margin-bottom: 0px;">open CONFIG,"c:/test.txt";</div>
<div style="margin-top: 0px; margin-bottom: 0px;">while(&lt;CONFIG&gt;){</div>
<div style="margin-top: 0px; margin-bottom: 0px;">print $_."\n";</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}</div>
<br />
29. say == print &nbsp;xxxx ."\n" &nbsp;# say &nbsp;相当 等于print 加换行符<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">30.hash</div>
<div style="margin-top: 0px; margin-bottom: 0px;">$family_name{"fred"}="flint";</div>
<div style="margin-top: 0px; margin-bottom: 0px;">$family_name{"bar"} ="rubble";</div>
<br />
%family_name("fred","flint","bar","rubble");<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">my %family_name=(</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;"fred" =&gt; "flint",<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;"bar" =&gt; "rubblle";<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">)</div>
<br />
my @k=keys %family_name;
<div style="margin-top: 0px; margin-bottom: 0px;">my @v=values %family_name; &nbsp;#return array</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">31.</div>
<div style="margin-top: 0px; margin-bottom: 0px;">each函数</div>
<div style="margin-top: 0px; margin-bottom: 0px;">while( ($key,$value)=each %family_name ){</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;print "$key =&gt; $value\n";<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}</div>
<div style="margin-top: 0px; margin-bottom: 0px;">exists函数</div>
<div style="margin-top: 0px; margin-bottom: 0px;">if(exists $family_name("dino")){</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">}</div>
<div style="margin-top: 0px; margin-bottom: 0px;">delete函数</div>
delete $family{"fred"};<br />
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">32.\1,\2使用反向引用</div>
<div style="margin-top: 0px; margin-bottom: 0px;">$_=""abba;</div>
<div style="margin-top: 0px; margin-bottom: 0px;">if(/(.)\1/){#匹配到 bb</div>
<div style="margin-top: 0px; margin-bottom: 0px;">&nbsp;&nbsp; &nbsp;print "it matched";<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">}</div>
<br />
33. \d = [0-9]
<div style="margin-top: 0px; margin-bottom: 0px;">\w = [A-Za-z0-9_]</div>
[^\d] 非数字
<div style="margin-top: 0px; margin-bottom: 0px;">[^\w]非词</div>
<div style="margin-top: 0px; margin-bottom: 0px;">[^\s]非空白字符</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">34./yes/i &nbsp;# /i 不区分大小写</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">35./s 匹配任意字符 ， 不包括换行</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">36./x运行加入空白，便于阅读理解</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">37.m//模式匹配搜索功能</div>
<div style="margin-top: 0px; margin-bottom: 0px;">S/// 模式匹配替换功能</div>
<div style="margin-top: 0px; margin-bottom: 0px;">/g 全局替换</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">38.@fields = split /separator/ , $string;</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">39.my $result = join $glue,@pieces;</div>
<div style="margin-top: 0px; margin-bottom: 0px;">my $x = join ":",4,5,6; # $x = "4:5:6";</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">40.*贪婪 *？非贪婪版本</div>
<br />
41.从命令行进行在线编辑
<div style="margin-top: 0px; margin-bottom: 0px;">perl -p -w -e "s/ran/ra/g" fred.dat</div>
<div style="margin-top: 0px; margin-bottom: 0px;">-p 打印 &nbsp;-n 去掉自动打印 &nbsp;-w 打开警告选项 &nbsp;-e 表示后面更得是代码，而不是普通的参数</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">42.last 类似break&nbsp;</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">43.my $stuff="Howdy world!";</div>
<div style="margin-top: 0px; margin-bottom: 0px;">my $where=index($stuff,"wor"); # $where = &nbsp;6<br />
<br />
</div>
<div style="margin-top: 0px; margin-bottom: 0px;">44.my $mineral=substr("Fred J. Flintstone",8,5); # 值为Flint</div>
<br />
<div style="margin-top: 0px; margin-bottom: 0px;">45.智能匹配对应不同德操作数，不同德处理方式<br />
%a ~~ %b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 哈希的键是否一致<br />
%a ~~@b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至少%a中的一个键在列表@b之中<br />
%a ~~ /Fred/&nbsp;&nbsp;&nbsp;&nbsp; 至少一个键匹配给定的模式<br />
%a ~~ 'Fred'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 哈希中某一指定键$a{'Fred'} 是否存在<br />
@a ~~ /Fred/&nbsp;&nbsp;&nbsp;&nbsp; 有一个元素匹配给定的模式<br />
@a ~~ 123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至少有一个元素转化为数字后事123<br />
<br />
$name ~~ undef&nbsp; $name确实尚未定义<br />
<br />
46.system 启动子进程<br />
system "date";<br />
<br />
14.my $tarfile="some*.tar";<br />
my @dirs=qw(fred|flinet&lt;bar&amp;rubble&gt; betty);<br />
system "tar"."cvf",$tarfile,@dirs;&nbsp; 带参数的系统命令调用<br />
<br />
47.system的所有语法对exec都适用<br />
执行exec类似goto语句，跳转到另个进程进行执行，当前perl进程会关闭<br />
chdir "/tmp" or die "cannot chdir /tmp: #!";<br />
ecec "bedrock","-o","args1",@ARGV;<br />
<br />
48.$ENV{'PATH'}="/home/rootbeer/bin:$ENV{'PATH'}";<br />
delete $ENV{'IFS'};<br />
my $make_result= system "make";<br />
改修改并不能影响shell或者其他父进程<br />
<br />
49.my $now =`date`;<br />
print "The time is now $now";<br />
魔力反引号调用进程<br />
<br />
50.perl -p -i.old -e "s/try//g" test.txt 替换文件中的内容,重新写入文件， 原文件备份为old后缀的文件.<br />
windows下要用双引号<br />
<br />
51.<br />
<br />
</div>
</div>
<img src ="http://www.blogjava.net/yuoveyu/aggbug/320202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuoveyu/" target="_blank">余坚</a> 2010-05-06 14:29 <a href="http://www.blogjava.net/yuoveyu/archive/2010/05/06/320202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>