<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>迷途知返 &#187; Perl</title>
	<atom:link href="http://pwwang.com/category/technology/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://pwwang.com</link>
	<description>专注技术,用心生活!</description>
	<lastBuildDate>Wed, 08 Feb 2012 09:37:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>自动生成Perl程序输入参数处理代码</title>
		<link>http://pwwang.com/2009/11/16/generate_perl_input_parameters_handling_codes/</link>
		<comments>http://pwwang.com/2009/11/16/generate_perl_input_parameters_handling_codes/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 09:17:39 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=812</guid>
		<description><![CDATA[&#160;

习惯于linux下用perl来处理一些文件文件和数据, 有时候就难免会写大量的脚本, 为脚本配上好的注释, 以及统一编码风格, 这是一个好的习惯.

只是需要敲入大量的重复代码. 其中对于输入参数的处理就是这样.

<span class="readmore"><a href="http://pwwang.com/2009/11/16/generate_perl_input_parameters_handling_codes/" title="自动生成Perl程序输入参数处理代码">Read More: 877 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>习惯于linux下用perl来处理一些文件文件和数据, 有时候就难免会写大量的脚本, 为脚本配上好的注释, 以及统一编码风格, 这是一个好的习惯.</p>
<p>只是需要敲入大量的重复代码. 其中对于输入参数的处理就是这样.</p>
<p>例如下面这段代码:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># This is a demo!</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">@ARGV</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> == INTRODUCTION ==<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;  This is a demo!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> == PARAMETERS ==<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;  -i &lt;input&gt; input text file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;  -o &lt;output&gt; output file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;     DEFAULT:output<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> == USAGE ==<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;  $0 -i &lt;input&gt; <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;  $0 -i &lt;input&gt; -o output <span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">$temp</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">$input</span><span style="color: #339933;">,</span>  <span style="color: #666666; font-style: italic;"># -i</span>
    <span style="color: #0000ff;">$output</span>  <span style="color: #666666; font-style: italic;"># -o</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-i&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$input</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-o&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$output</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Warning: argument $temp igorned.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$input</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Error: argument '-i' is needed.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$output</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;output&quot;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">## End of handling parameters ##</span></pre></div></div>

<p><span id="more-812"></span>如果要修改参数, 可能还会牵扯到其他方面的修改. 其实我们只需要表格式地填写好各个参数的属性, 完全可以自动地生成这段代码.</p>
<p>这个比较地简单. 而如果我有一段格式对应的代码, 从中提取相应的参数, 这个会稍微复杂点. 不过有风骚的Regular expression, 这个就不是问题了.</p>
<p>Show图片了:</p>
<p><a href="http://pwwang.com/wp-content/uploads/2009/11/Generate_Perl_Input_Parameters_Handling_Codes.png"><img width="538" height="611" border="0" title="Generate_Perl_Input_Parameters_Handling_Codes" alt="Generate_Perl_Input_Parameters_Handling_Codes" src="http://pwwang.com/wp-content/uploads/2009/11/Generate_Perl_Input_Parameters_Handling_Codes.png" style="clear: both;" /></a></p>
<p><a href="http://pwwang.com/tools/formatPerlParam.html" target="_blank"><span style="color: rgb(255, 0, 0);"><strong><span style="font-size: medium;">工具地址</span></strong></span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/11/16/generate_perl_input_parameters_handling_codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Perl来Post网页数据</title>
		<link>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/</link>
		<comments>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 08:57:46 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=585</guid>
		<description><![CDATA[&#160;

我只能说，How 强大 Perl is！

我用过不同的方法来实现网页的post，但是perl是最方便最好用的！

<span class="readmore"><a href="http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/" title="用Perl来Post网页数据">Read More: 1509 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>我只能说，How 强大 Perl is！</p>
<p>我用过不同的方法来实现网页的post，但是perl是最方便最好用的！</p>
<p>废话不多说，看代码(这是一段实际工作中用到的代码，也可以修改一下用作其他用途，严禁做坏事：）） )：</p>
<p><span id="more-585"></span></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Panwen Wang, April 7th, 2009</span>
<span style="color: #666666; font-style: italic;"># Submit a query to http://consurf.tau.ac.il/</span>
<span style="color: #666666; font-style: italic;"># to get conservation scores of each residue.</span>
<span style="color: #666666; font-style: italic;">#</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> URI<span style="color: #339933;">::</span><span style="color: #006600;">Escape</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">Simple</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span><span style="color: #339933;">::</span><span style="color: #006600;">Common</span> <span style="color: #000066;">qw</span><span style="color: #009900;">&#40;</span>POST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ua</span> <span style="color: #339933;">=</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> $0: <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Panwen Wang, April 7th, 2009&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Submit a query to http://consurf.tau.ac.il/ <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>to get conservation scores of each residue.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> Parameters:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-p &lt;pdb_ID&gt;         pdb id in four letters<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-c &lt;chain&gt;          chain label of given pdb<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-a &lt;algorithm&gt;      Bayes/LikelihoodML<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT:Bayes<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-m &lt;MSAprogram&gt;     MUSCLE/CLUSTALW<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: MUSCLE<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-d &lt;DATABASE&gt;       the Homologues database, SWISS-PROT/Uniprot<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: SWISS-PROT<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-n &lt;MAX_NUM_HOMOL&gt;  Max. Number of Homologues<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 50<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-i &lt;ITERATIONS&gt;     No. of PSI-BLAST Iterations<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-e &lt;ESCORE&gt;         PSI-BLAST E-value Cutoff<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 0.001<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-s &lt;MATRIX&gt;         Model of substitution for proteins<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>JTT(DEFAULT)/mtREV(for mitochondrial proteins)/cpREV(for chloroplasts proteins)/WAG/Dayhoff<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-l &lt;email&gt;          user's email<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-o &lt;output folder&gt;  where the result files(1A0O_A.score) restore<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> Usage:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>$0 -p 2UUY -c A -l xxx<span style="color: #000099; font-weight: bold;">\@</span>xxx.com -o ./conservation<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>$0 -p 2UUY -c A -l xxx<span style="color: #000099; font-weight: bold;">\@</span>xxx.com -o ./conservation -a LikelihoodML ...<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$pdb_ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chain</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$user_email</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ALGORITHM</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MSAprogram</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$DATABASE</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MAX_NUM_HOMOL</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ITERATIONS</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ESCORE</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MATRIX</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$out_dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-p&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$pdb_ID</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-c&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$chain</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-a&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ALGORITHM</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-m&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MSAprogram</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-d&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$DATABASE</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-n&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MAX_NUM_HOMOL</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-i&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ITERATIONS</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-e&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ESCORE</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-s&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MATRIX</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-l&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$user_email</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-o&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$out_dir</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Warning: argument $temp igorned.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-p' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$pdb_ID</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-c' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chain</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-l' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$user_email</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-o' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$out_dir</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ALGORITHM</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Bayes&quot;</span>                       <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ALGORITHM</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MSAprogram</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;MUSCLE&quot;</span>                     <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MSAprogram</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$DATABASE</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;SWISS-PROT&quot;</span>                   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$DATABASE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MAX_NUM_HOMOL</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;50&quot;</span>                      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MAX_NUM_HOMOL</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ITERATIONS</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;1&quot;</span>                          <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ITERATIONS</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ESCORE</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;0.001&quot;</span>                          <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ESCORE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MATRIX</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;JTT&quot;</span>                            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MATRIX</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># end of handling parameters</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># read and encode the queries</span>
<span style="color: #666666; font-style: italic;">#my $encoded_query;</span>
<span style="color: #666666; font-style: italic;">##foreach my $query (@ARGV)</span>
<span style="color: #666666; font-style: italic;">##    {</span>
<span style="color: #666666; font-style: italic;">##    open(QUERY,$query);</span>
<span style="color: #666666; font-style: italic;">##    while(&lt;QUERY&gt;)</span>
<span style="color: #666666; font-style: italic;">##        {</span>
<span style="color: #666666; font-style: italic;">##        $encoded_query = $encoded_query . uri_escape($_);</span>
<span style="color: #666666; font-style: italic;">##        }</span>
<span style="color: #666666; font-style: italic;"># }</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># build the request</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$args</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;pdb_ID=$pdb_ID&amp;chain=$chain&amp;user_email=$user_email&amp;ALGORITHM=$ALGORITHM&amp;MSAprogram=$MSAprogram&amp;DATABASE=$DATABASE&amp;MAX_NUM_HOMOL=$MAX_NUM_HOMOL&amp;ITERATIONS=$ITERATIONS&amp;ESCORE=$ESCORE&amp;MATRIX=$MATRIX&amp;send_user_mail=yes&amp;BayesInterval=3&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Querying ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span> POST <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'http://consurf.tau.ac.il/cgi-bin/consurf.cgi'</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$req</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content_type</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'application/x-www-form-urlencoded'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$req</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get the response</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># parse out the request id</span>
<span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/The document has moved &lt;a href=\&quot;(.+)\&quot;&gt;here/</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result_page</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Waiting ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">sleep</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># poll for results</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">sleep</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span> GET <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$result_page</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/ConSurf calculation is finished/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Getting result ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$prefix_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$result_page</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/(.+)output\.html/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result_file</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;${prefix_url}pdb&quot;</span><span style="color: #339933;">.</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$pdb_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;.gradesPE&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Saving result ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        getstore<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$result_file</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;$out_dir/${pdb_ID}_$chain.score&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">#my $req1 = new HTTP::Request GET =&gt; $result_file;</span>
        <span style="color: #666666; font-style: italic;">#my $response1 = $ua-&gt;request($req1);</span>
        <span style="color: #666666; font-style: italic;">#open(OUT,&quot;&gt;$out_dir/${pdb_ID}_$chain.score&quot;);</span>
        <span style="color: #666666; font-style: italic;">#print OUT  $response1-&gt;content;</span>
        <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/For assistance please/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ERROR! ConSurf session has been terminated.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Waiting ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>    
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Sth. unexpected happened.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># end poll loop</span></pre></div></div>

<p>这个例子稍复杂了点，但是个比较全面的例子了，也可以post文件，但需要中间那段uri_escape.另外，我在考虑一个问题，这样post后，页面接收到的$_SERVER[&quot;HTTP_REFERER&quot;](以php为例)会是什么呢？只是觉得很奇怪，但是没有实验过，哪天有时间实验一下，再把结果贴出来。 </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Jacobi法求特征值和特征向量[perl]</title>
		<link>http://pwwang.com/2009/04/10/jacobi%e6%b3%95%e6%b1%82%e7%9f%a9%e9%98%b5%e7%9a%84%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fperl%e7%89%88/</link>
		<comments>http://pwwang.com/2009/04/10/jacobi%e6%b3%95%e6%b1%82%e7%9f%a9%e9%98%b5%e7%9a%84%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fperl%e7%89%88/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 04:32:43 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Jacobi方法求特征值和特征向量]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=578</guid>
		<description><![CDATA[&#160;

这个矩阵要求是实对称矩阵，jacobi法的实质就是坐标旋转。对称矩阵和二次型是对应的，通过坐标旋转可以消去交叉项，将原矩阵化成只剩对角元素的三角阵（其他元素为0），这些对角元素就是矩阵的特征值。

可以证明，jacobi方法是收敛的。其缺点是对于稀疏矩阵旋转后难保持其稀疏性。

<span class="readmore"><a href="http://pwwang.com/2009/04/10/jacobi%e6%b3%95%e6%b1%82%e7%9f%a9%e9%98%b5%e7%9a%84%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fperl%e7%89%88/" title="Jacobi法求特征值和特征向量[perl]">Read More: 5677 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>这个矩阵要求是实对称矩阵，jacobi法的实质就是坐标旋转。对称矩阵和二次型是对应的，通过坐标旋转可以消去交叉项，将原矩阵化成只剩对角元素的三角阵（其他元素为0），这些对角元素就是矩阵的特征值。</p>
<p>可以证明，jacobi方法是收敛的。其缺点是对于稀疏矩阵旋转后难保持其稀疏性。</p>
<p><a target="_blank" href="http://pwwang.com/?p=589">具体的理论算法请看这里</a></p>
<p>&nbsp;</p>
<p><span id="more-578"></span></p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Panwen Wang, April 8th, 2009</span>
<span style="color: #666666; font-style: italic;"># pwwang AT pwwang.com</span>
<span style="color: #666666; font-style: italic;"># get eigenvalues and eigenvectors of</span>
<span style="color: #666666; font-style: italic;"># a real symmetric matrix like</span>
<span style="color: #666666; font-style: italic;">#  1  -1  0 </span>
<span style="color: #666666; font-style: italic;"># -1   1  2</span>
<span style="color: #666666; font-style: italic;">#  0   2  1</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Algorithm:</span>
<span style="color: #666666; font-style: italic;"># 1. get a nonzero and non-diagonal element a[i,j] of matrix A, usually</span>
<span style="color: #666666; font-style: italic;">#    the maximun absolute value of non-diagonal elements of A (max(A));  </span>
<span style="color: #666666; font-style: italic;"># 2. give sin(phi) and cos(phi) by </span>
<span style="color: #666666; font-style: italic;">#    ( a[j,j]-a[i,i] )*sin(2*phi) + 2*a[i,j]*cos(2*phi) = 0 ;</span>
<span style="color: #666666; font-style: italic;">#    =&gt; tan(2*phi) = 2*a[i,j]/(a[i,i]-a[j,j]) </span>
<span style="color: #666666; font-style: italic;">#    =&gt; phi = arctan(2*a[i,j]/(a[i,i]-a[j,j]))/2 </span>
<span style="color: #666666; font-style: italic;"># 3. get elements of a new matrix A1(a1[i,j]) by</span>
<span style="color: #666666; font-style: italic;">#    a1[i,i] = a[i,i]*cos^2(phi) + a[j,j]*sin^2(phi) + 2*a[i,j]*cos(phi)*sin(phi)</span>
<span style="color: #666666; font-style: italic;">#    a1[j,j] = a[i,i]*sin^2(phi) + a[j,j]*cos^2(phi) - 2*a[i,j]*cos(phi)*sin(phi)</span>
<span style="color: #666666; font-style: italic;">#    a1[i,l] = a1[l,i] = a[i,l]*cos(phi) + a[j,l]*sin(phi)       ( l!=i,j )</span>
<span style="color: #666666; font-style: italic;">#    a1[j,l] = a1[l,j] = -a[i,l]*sin(phi) + a[j,l]*cos(phi)      ( l!=i,j )</span>
<span style="color: #666666; font-style: italic;">#    a1[l,m] = a1[m,l] = a[m,l]                                  ( m,l != i,j )</span>
<span style="color: #666666; font-style: italic;">#    a1[i,j] = a1[j,i] = { (a[j,j]-a[i,i])*sin(2*phi) }/2 + a[i,j]*(cos^2(phi) - sin^2(phi))</span>
<span style="color: #666666; font-style: italic;"># 4. let A1 be the substitution of A, repeat step 1,2,3 and get A2, and A3,A4,...,An can be </span>
<span style="color: #666666; font-style: italic;">#    obtained by the same way. Calculation ceases if max(An) is less than the given threshold.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #000066;">package</span> Jacobi<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        MATRIX        <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        EIGENVALUE  <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        EIGENVECTOR <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        PRECISION       <span style="color: #339933;">=&gt;</span> 1e<span style="color: #339933;">-</span>5<span style="color: #339933;">,</span>
        DIMENSION   <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># load matrix</span>
<span style="color: #000000; font-weight: bold;">sub</span> setMatrix<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MATRIX<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #0000ff;">@_</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MATRIX<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">jacobi</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># load matrix from an array</span>
<span style="color: #000000; font-weight: bold;">sub</span> setMatrixFromArray<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@matrix</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@array</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$s</span> <span style="color: #339933;">=</span> <span style="color: #000066;">sqrt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$s</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^[1-9]d*(.0*)?$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># tell if $s is an integer.</span>
    <span style="color: #666666; font-style: italic;"># if it is, the array can be converted to a matrix</span>
    <span style="color: #666666; font-style: italic;"># and $s is the dimension of the matrix</span>
    <span style="color: #666666; font-style: italic;"># if not, exit</span>
        <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$s</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$s</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@row</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$s</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">push</span> <span style="color: #0000ff;">@row</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #0000ff;">*$s</span><span style="color: #339933;">+</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000066;">push</span> <span style="color: #0000ff;">@matrix</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span> <span style="color: #0000ff;">@row</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;setMatrixFromArray: Array cannot be converted to matrix.n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MATRIX<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #0000ff;">@matrix</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">jacobi</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set precision request</span>
<span style="color: #000000; font-weight: bold;">sub</span> setPrecision<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>PRECISION<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># eigenvalues</span>
<span style="color: #000000; font-weight: bold;">sub</span> eigenvalues<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVALUE<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># eigenvectors</span>
<span style="color: #000000; font-weight: bold;">sub</span> eigenvectors<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVECTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get max element fabs and its subscripts</span>
<span style="color: #000000; font-weight: bold;">sub</span> max<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$matrix</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #0000ff;">@_</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$max</span> <span style="color: #339933;">=</span> <span style="color: #000066;">abs</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$matrix</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$j</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@ijmax</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
    <span style="color: #666666; font-style: italic;"># ensure $i is less than $j</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">$j</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000066;">abs</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$matrix</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">$max</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$max</span> <span style="color: #339933;">=</span> <span style="color: #000066;">abs</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$matrix</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">@ijmax</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># if</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># if</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># for $j</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># for $i</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">@ijmax</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># step 3, get a new matrix by a give phi value</span>
<span style="color: #000000; font-weight: bold;">sub</span> newMatrix<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$phi</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@mat</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$sp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$cp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@mat1</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">=</span><span style="color: #0000ff;">$ii</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$i</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>      <span style="color: #666666; font-style: italic;"># row $i</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$i</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>      <span style="color: #666666; font-style: italic;"># colomn $i</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #0000ff;">*$sp</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #0000ff;">*$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span> 
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$j</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># colomn $j</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #0000ff;">*$sp</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$cp</span><span style="color: #0000ff;">*$cp</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$sp</span><span style="color: #0000ff;">*$sp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>            <span style="color: #666666; font-style: italic;"># colomn $l ( l!=i,j)</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$j</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;"># row $j</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$i</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>      <span style="color: #666666; font-style: italic;"># colomn $i</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #0000ff;">*$sp</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$cp</span><span style="color: #0000ff;">*$cp</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$sp</span><span style="color: #0000ff;">*$sp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$j</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># colomn $j</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #0000ff;">*$sp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #0000ff;">*$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>            <span style="color: #666666; font-style: italic;"># colomn $l ( l!=i,j )</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>            <span style="color: #666666; font-style: italic;"># row $l ( l!=i,j )</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$i</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>      <span style="color: #666666; font-style: italic;"># colomn $i</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$jj</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$j</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># colomn $j</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$cp</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #0000ff;">*$sp</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>            <span style="color: #666666; font-style: italic;"># colomn $l ( l!=i,j )</span>
                    <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mat1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$jj</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>    
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">@mat1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># calculating</span>
<span style="color: #000000; font-weight: bold;">sub</span> jacobi<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@matrix</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MATRIX<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;"># initial matrix</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$phi</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@tempVectors</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@vectors</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@cmat</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$tempVectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> 
            <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$tempVectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">;;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># step 4</span>
        <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$max</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span>  <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">max</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@matrix</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;"># step 1</span>
        <span style="color: #b1b100;">last</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$max</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>PRECISION<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #666666; font-style: italic;"># if the maximum value of the matrix LE(Less than or Equal to) the limit, break</span>
        <span style="color: #0000ff;">$phi</span> <span style="color: #339933;">=</span> <span style="color: #000066;">atan2</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #0000ff;">*$matrix</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$matrix</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">$matrix</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;"># step 2</span>
        <span style="color: #0000ff;">@matrix</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">newMatrix</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$phi</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@matrix</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># step 3</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;">==</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
                <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
                <span style="color: #0000ff;">$vectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>    
        <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000066;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$phi</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># for eigenvectors</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$z</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$z</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$z</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$vectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$vectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$tempVectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$z</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> <span style="color: #0000ff;">$cmat</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$z</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #666666; font-style: italic;">#print $vectors[$x][$y],&quot;-&quot;,$tempVectors[$x][$y],&quot; &quot;;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$tempVectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$vectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #666666; font-style: italic;">#@tempVectors = @vectors;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;"># the digonal elements are the eigenvalues</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVALUE<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$matrix</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVECTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;"># perl does not have a conception of multiple array, thus it can not give a colomn</span>
    <span style="color: #666666; font-style: italic;"># by a simple variable, so we transpose @vectors, let row be the eigenvector of the</span>
    <span style="color: #666666; font-style: italic;"># corresponding eigenvalue.</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVECTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$vectors</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> printEig<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Eigenvalue [$i]: &quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVALUE<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Eigenvector[$i]: [ &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>DIMENSION<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span> <span style="color: #ff0000;">&quot;%9.6f, &quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>EIGENVECTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; ] n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>调用方法：</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Jacobi<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;"># package name is Jacobi.pm</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@a</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#91;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#my @a = (</span>
<span style="color: #666666; font-style: italic;">#    [10,     7,     8,     7],</span>
<span style="color: #666666; font-style: italic;">#    [ 7,     5,     6,     5],</span>
<span style="color: #666666; font-style: italic;">#    [ 8,     6,    10,     9],</span>
<span style="color: #666666; font-style: italic;">#    [ 7,     5,     9,    10]</span>
<span style="color: #666666; font-style: italic;">#);</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$jac</span> <span style="color: #339933;">=</span> Jacobi<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span> 
<span style="color: #0000ff;">$jac</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setMatrix</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@a</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@eigenvalues</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$jac</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">eigenvales</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@eigenvectors</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$jac</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">eigenvectors</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># 2-D array</span>
<span style="color: #666666; font-style: italic;"># each ROW corresponds to the corresponding eigenvalue.</span>
<span style="color: #0000ff;">$jac</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">printEig</span><span style="color: #339933;">;</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/10/jacobi%e6%b3%95%e6%b1%82%e7%9f%a9%e9%98%b5%e7%9a%84%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fperl%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>操作pdb文件的类Perl版</title>
		<link>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/</link>
		<comments>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 06:50:28 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[pdb]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=548</guid>
		<description><![CDATA[&#160;

前面写过一个C++的版本, 功能写得非常的简单, 并且没有考虑到有MODEL的情况.

终于下定决心用Perl来重写这个类. 主要是由于以前没有用过Perl的面向对象写东西,很生疏,怕写不好,但是真正写起来却发现是那么地顺手

<span class="readmore"><a href="http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/" title="操作pdb文件的类Perl版">Read More: 7315 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>前面写过一个<a href="http://pwwang.com/?p=18" target="_blank">C++的版本</a>, 功能写得非常的简单, 并且没有考虑到有MODEL的情况.</p>
<p>终于下定决心用Perl来重写这个类. 主要是由于以前没有用过Perl的面向对象写东西,很生疏,怕写不好,但是真正写起来却发现是那么地顺手</p>
<p>perl不用费尽心思一个个地写函数的重载, 正则表达式比substr更好用. 甚至get和set可以写在一个函数里.</p>
<p>包括5个pm,放在目录pdbClass目录下, 所以每个pm里都是use pdbClass::</p>
<p>(pdbClass父目录下的perl文件)调用的时候use pdbClass::Pdb就行了.</p>
<p><span id="more-548"></span><b>Atom.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Atom<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>    <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        SERIAL        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># id of the atom</span>
        NAME         <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># full name of the atom, like CA</span>
        RESNAME        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># name of the residue of the atom</span>
        CHAINID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># chain label of the atom</span>
        RESSEQ        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># residue id of the atom</span>
        X            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># x</span>
        Y            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># y</span>
        Z            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># z</span>
        OCCUPANCY    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># occupancy</span>
        TEMPFACTOR    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># temperature factor</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Parameters: - / $line </span>
<span style="color: #666666; font-style: italic;"># Get information from an atom text line </span>
<span style="color: #666666; font-style: italic;"># or return an atom text line</span>
<span style="color: #000000; font-weight: bold;">sub</span> line<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$line</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^ATOM\s+(\d+)\s+([A-Z0-9]+)\s*([A-Z]{3})\s+([A-Z0-9]{1})\s*([a-z0-9]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+).+$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #666666; font-style: italic;"># ATOM   2843  C   ASN C 124     143.867  14.117  34.756  1.00 39.65</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span>     <span style="color: #000066;">sprintf</span><span style="color: #009900;">&#40;</span>
                <span style="color: #ff0000;">&quot;ATOM  %5d  %-3s %-3s %s%4s    %8.3f%8.3f%8.3f%6.2f%6.2f&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get serial of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> serial<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get name of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> name<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get resName of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> resName<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get chainId of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> chainId<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get resSeq of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> resSeq<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get x</span>
<span style="color: #000000; font-weight: bold;">sub</span> x<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get y</span>
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000066;">y</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get z</span>
<span style="color: #000000; font-weight: bold;">sub</span> z<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get occupancy</span>
<span style="color: #000000; font-weight: bold;">sub</span> occupancy<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get temperature factor</span>
<span style="color: #000000; font-weight: bold;">sub</span> tempFactor<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#calculate the distance from this atom to another </span>
<span style="color: #000000; font-weight: bold;">sub</span> distanceFrom<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$atom</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">sqrt</span><span style="color: #009900;">&#40;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">x</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">x</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">z</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">z</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Residue.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Residue<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Atom</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        ATOMS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: atoms </span>
<span style="color: #666666; font-style: italic;">#        atoms($subscript)</span>
<span style="color: #666666; font-style: italic;">#        atoms($serial,1)</span>
<span style="color: #666666; font-style: italic;"># return all atoms or an atom by subscript</span>
<span style="color: #666666; font-style: italic;"># or an atom by its serial/id.</span>
<span style="color: #000000; font-weight: bold;">sub</span> atoms<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATOMS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATOMS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> name<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get residue name</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resName</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> chainId<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get chain id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> seq<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get residue id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #339933;">;</span>    
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> ca<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;"># get atom CA</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$atom</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">name</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;CA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">return</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addAtom<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add atom to this residue</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of atoms</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> abbr<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get abbreviation name</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">%aa</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #ff0000;">'ALA'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'A'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLY'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'G'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'LEU'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'L'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ILE'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'I'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'MET'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'M'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'SER'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'S'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'THR'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'T'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'TYR'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'Y'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'PHE'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'F'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ASP'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'D'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ASN'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'N'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLU'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'E'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLN'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'Q'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ARG'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'R'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'HIS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'H'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'CYS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'C'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'TRP'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'W'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'VAL'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'V'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'LYS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'K'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'PRO'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'P'</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$aa</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resName</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Chain.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Chain<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Residue</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        RESIDUES<span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: residues </span>
<span style="color: #666666; font-style: italic;">#        residues($subscript)</span>
<span style="color: #666666; font-style: italic;">#        residues($id,1)</span>
<span style="color: #666666; font-style: italic;"># return all residues or a residue by subscript</span>
<span style="color: #666666; font-style: italic;"># or a residue by its id.</span>
<span style="color: #000000; font-weight: bold;">sub</span> residues<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;RESIDUES: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;RESIDUES: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get chain id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addResidue<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add residue to this chain</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># how many residues this chain contains</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get a sequence by abbreviation of residues' name</span>
<span style="color: #000000; font-weight: bold;">sub</span> sequence<span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seq</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$residue</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$seq</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">$residue</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">abbr</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$seq</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Model.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Model<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Chain</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        CHAINS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        ID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: chains </span>
<span style="color: #666666; font-style: italic;">#        chains($subscript)</span>
<span style="color: #666666; font-style: italic;">#        chains($label,1)</span>
<span style="color: #666666; font-style: italic;"># return all chains or a chain by subscript</span>
<span style="color: #666666; font-style: italic;"># or a chain by its label.</span>
<span style="color: #000000; font-weight: bold;">sub</span> chains<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;CHAINS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;CHAINS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get model id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addChain<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add chain to this model</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of chains</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Pdb.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Pdb<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Model</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        MODELS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        ID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># like 1A0O</span>
        CLASH    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># like 1A0O_AB  (comes from 1A0O_AB.pdb)</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># load pdb from a pdb file</span>
<span style="color: #000000; font-weight: bold;">sub</span> load<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Pdb file name needed!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chainFlag</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$residueFlag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$residue</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chain</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>FILE<span style="color: #339933;">,</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$line</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;FILE&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^MODEL\s+(.+)$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;"># if contains models</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
                <span style="color: #0000ff;">$modelFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span> <span style="color: #339933;">=</span> Model<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^ATOM.+$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$atom</span> <span style="color: #339933;">=</span> Atom<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">line</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$model</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   <span style="color: #666666; font-style: italic;"># if not contains models,</span>
                <span style="color: #0000ff;">$model</span> <span style="color: #339933;">=</span> Model<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;"># define one, and set id 0</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chainFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$chainFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span> 
                <span style="color: #0000ff;">$chain</span> <span style="color: #339933;">=</span> Chain<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addChain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chain</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$residueFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$residueFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #339933;">;</span>    
                <span style="color: #0000ff;">$residue</span> <span style="color: #339933;">=</span> Residue<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span> 
                <span style="color: #0000ff;">$chain</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addResidue</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$residue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>    
            <span style="color: #0000ff;">$residue</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addAtom</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>FILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get or set clash</span>
<span style="color: #000000; font-weight: bold;">sub</span> clash<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: models </span>
<span style="color: #666666; font-style: italic;">#        models($subscript)</span>
<span style="color: #666666; font-style: italic;">#        models($label,1)</span>
<span style="color: #666666; font-style: italic;"># return all models or a model by subscript</span>
<span style="color: #666666; font-style: italic;"># or a model by its label.</span>
<span style="color: #000000; font-weight: bold;">sub</span> models<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MODELS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MODELS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get pdb id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addModel<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add models</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of models</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个简单的perl函数返回数组的问题</title>
		<link>http://pwwang.com/2009/03/17/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84perl%e5%87%bd%e6%95%b0%e8%bf%94%e5%9b%9e%e6%95%b0%e7%bb%84%e7%9a%84%e9%97%ae%e9%a2%98/</link>
		<comments>http://pwwang.com/2009/03/17/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84perl%e5%87%bd%e6%95%b0%e8%bf%94%e5%9b%9e%e6%95%b0%e7%bb%84%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 08:56:27 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=546</guid>
		<description><![CDATA[&#160;

先看一个正确可运行的例子：



<span class="readmore"><a href="http://pwwang.com/2009/03/17/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84perl%e5%87%bd%e6%95%b0%e8%bf%94%e5%9b%9e%e6%95%b0%e7%bb%84%e7%9a%84%e9%97%ae%e9%a2%98/" title="一个简单的perl函数返回数组的问题">Read More: 227 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>先看一个正确可运行的例子：</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> a<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@aa</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">@aa</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@b</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&amp;a</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #0000ff;">$b</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这个是一点问题也没有，问题是，如果我不想用那个中间变量@b，而想直接用a，那该如果写呢？</p>
<p>&nbsp;</p>
<p>其实这么写就能得到第一个元素的值了： (&#038;a)[0] </p>
<p>但是用在了print后就报错了，原因是print把(&#038;a)的括号当成了它参数的括号,这样就仅仅把&#038;a当成了它的参数,当然会报错.</p>
<p>正确的写法:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&amp;a</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/03/17/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84perl%e5%87%bd%e6%95%b0%e8%bf%94%e5%9b%9e%e6%95%b0%e7%bb%84%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一种对带参数选项的参数的读取方法[Perl]</title>
		<link>http://pwwang.com/2009/03/04/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95perl/</link>
		<comments>http://pwwang.com/2009/03/04/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95perl/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 01:39:41 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=530</guid>
		<description><![CDATA[&#160;

前面写了一个C++版本的， 再来一个Perl版本的：

&#160;

<span class="readmore"><a href="http://pwwang.com/2009/03/04/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95perl/" title="一种对带参数选项的参数的读取方法[Perl]">Read More: 384 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>前面写了一个<a target="_blank" href="http://pwwang.com/?p=526">C++版本</a>的， 再来一个Perl版本的：</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot; program information <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot; program usage <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$temp</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$parm1</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$parm2</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-1&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$parm1</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-2&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$parm2</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Warning: argument $temp igorned.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$parm1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#检测参数</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Error: argument '-1' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">$parm2</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$parm2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">#给出默认值</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/03/04/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在perl中嵌入shell命令</title>
		<link>http://pwwang.com/2009/01/03/%e5%9c%a8perl%e4%b8%ad%e5%b5%8c%e5%85%a5shell%e5%91%bd%e4%bb%a4/</link>
		<comments>http://pwwang.com/2009/01/03/%e5%9c%a8perl%e4%b8%ad%e5%b5%8c%e5%85%a5shell%e5%91%bd%e4%bb%a4/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 05:21:38 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=387</guid>
		<description><![CDATA[在linux中，如果要把几个可执行程序结合起来使用，一般是采用shell或者perl，当然，python也可以。

这里说一下在perl里嵌入shell命令的情形。

一般来说，最简单的方式就是采用&#8220;（qx//）就可以执行命令

<span class="readmore"><a href="http://pwwang.com/2009/01/03/%e5%9c%a8perl%e4%b8%ad%e5%b5%8c%e5%85%a5shell%e5%91%bd%e4%bb%a4/" title="在perl中嵌入shell命令">Read More: 1297 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>在linux中，如果要把几个可执行程序结合起来使用，一般是采用shell或者perl，当然，python也可以。</p>
<p>这里说一下在perl里嵌入shell命令的情形。</p>
<p>一般来说，最简单的方式就是采用&#8220;（qx//）就可以执行命令</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #007800;">$cmd</span> = <span style="color: #ff0000;">&quot;du * sh&quot;</span>; 
<span style="color: #000000; font-weight: bold;">`</span><span style="color: #007800;">$cmd</span><span style="color: #000000; font-weight: bold;">`</span>;</pre></div></div>

<p>这样命令就执行了，但是却并没有输出。要输入的话，简单的可以这么处理：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> print <span style="color: #000000; font-weight: bold;">`</span><span style="color: #007800;">$cmd</span><span style="color: #000000; font-weight: bold;">`</span>;</pre></div></div>

<p>这里，如果程序有输入，那就不行了，后面再细说。</p>
<p><span id="more-387"></span></p>
<p>下面看看另外一种方式，即system执行命令，它可以返回程序的退出状态，也就是说它可以判断程序执行是否成功，我们也可以拿它来做个有趣的东西，看下面的程序：</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt; </span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>  
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argt, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>    
     <span style="color: #0000ff;">int</span> a <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">48</span><span style="color: #008080;">;</span>    
     <span style="color: #0000ff;">int</span> b <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">48</span><span style="color: #008080;">;</span>    
     <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> a<span style="color: #000040;">+</span>b <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>    
     <span style="color: #0000ff;">return</span> a<span style="color: #000040;">+</span>b<span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>这是一个c++程序，我们把程序的退出状态设定为输入参数的第1和第2个参数的第一个字符代表的数字的和。通过g++，我们把它编译为add程序： g++ add.cc -o add</p>
<p>那么利用perl的system函数，就可以捕获这一退出状态：</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl </span>
&nbsp;
<span style="color: #0000ff;">$a</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #0000ff;">$b</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #000066;">system</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;./add $a $b&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>输出4</p>
<p>也就是说我们可以利用其他程序来为perl做计算，这个是不是有点像dll的味道？ ：）</p>
<p>但是这里有个缺点，就是程序的退出状态必须是整数。</p>
<p>那么perl是不是就没办法做这件事了呢？ 我要说是，很多perl的fans肯定不乐意了，既然perl强大，我们就见识一下它怎么来做这件事吧</p>
<p>我们把那个c++程序改一改：</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt; </span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>  
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argt, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>     
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>    
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>我们用这个程序来输出第一个参数的第一个字符的ascii码，在perl里我们这么来使用：</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
&nbsp;
<span style="color: #0000ff;">$a</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;a&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$b</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">`./add $a`</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #0000ff;">$a</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;:&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$b</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>输出 a:97</p>
<p>怎么样，是不是更有dll的味道了？</p>
<p>最后来说一下如果调用的程序里有输入，又该怎么处理呢？ 我们再把c++程序改一改</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include&lt;iostream&gt; </span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>  
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>  <span style="color: #666666;">//这次直接采用输入流输入参数，不直接接受参数     </span>
    <span style="color: #0000ff;">char</span> a<span style="color: #008080;">;</span>     
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;input a char:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>   <span style="color: #666666;">//这里有endl非常重要，下面解释    </span>
    <span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span> a<span style="color: #008080;">;</span>    
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>a <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>     
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>这个程序让用户手动输入字符，打印字符的ascii码，来看在perl中的调用</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl </span>
&nbsp;
<span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;./add&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>CMD<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;($cmd) |&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009999;">&lt;cmd&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066;">print</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>  <span style="color: #666666; font-style: italic;">#一行一行地输出&lt;br /&gt;close(CMD);&lt;br /&gt;&lt;/cmd&gt;</span></pre></div></div>

<p>输出：</p>
<blockquote><p> input a char:<br />
a<br />
97 </p></blockquote>
<p>解释一下为什么第一个endl很重要，因为在输出的时候，无法同时处理输入和输出，所以加换行，让输入单独在一行。</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/01/03/%e5%9c%a8perl%e4%b8%ad%e5%b5%8c%e5%85%a5shell%e5%91%bd%e4%bb%a4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>linux下通用解压缩程序Perl版</title>
		<link>http://pwwang.com/2009/01/01/linux%e4%b8%8b%e9%80%9a%e7%94%a8%e8%a7%a3%e5%8e%8b%e7%bc%a9%e7%a8%8b%e5%ba%8fperl%e7%89%88/</link>
		<comments>http://pwwang.com/2009/01/01/linux%e4%b8%8b%e9%80%9a%e7%94%a8%e8%a7%a3%e5%8e%8b%e7%bc%a9%e7%a8%8b%e5%ba%8fperl%e7%89%88/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 03:31:25 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=374</guid>
		<description><![CDATA[&#160;

无意中看到有人贴linux中常用的解压缩命令的用法，通常最后都有一个程序叫做sEx， 叫super extractor， 我去SF上下下来看了一下，也是perl写的， 不过真的只是一个通用的解压的程序， 压缩并没有实现， 于是自己动手把通用的解压缩都实现了，供自己用，也供大家方便。

不过说实话， 我用的压缩格式并不多， 并不需要用太多的命令，一般用tar（只归档，不压缩），tar.gz，rar（windows用得多）。

<span class="readmore"><a href="http://pwwang.com/2009/01/01/linux%e4%b8%8b%e9%80%9a%e7%94%a8%e8%a7%a3%e5%8e%8b%e7%bc%a9%e7%a8%8b%e5%ba%8fperl%e7%89%88/" title="linux下通用解压缩程序Perl版">Read More: 2906 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>无意中看到有人贴linux中常用的解压缩命令的用法，通常最后都有一个程序叫做sEx， 叫super extractor， 我去SF上下下来看了一下，也是perl写的， 不过真的只是一个通用的解压的程序， 压缩并没有实现， 于是自己动手把通用的解压缩都实现了，供自己用，也供大家方便。</p>
<p>不过说实话， 我用的压缩格式并不多， 并不需要用太多的命令，一般用tar（只归档，不压缩），tar.gz，rar（windows用得多）。</p>
<p>这个程序支持格式：tar，tar.gz，gz，tar.bz2，bz2，tar.bz，bz，tar.Z，Z，zip，rar，lha，rpm</p>
<p>可以压缩，解压，查看压缩包的内容</p>
<p>基本用法：</p>
<blockquote>
<p>压缩：exInOne a 归档文件 文件1 &lt;文件2 文件3 &#8230;&gt;</p>
<p>解压：exInOne x 归档文件</p>
<p>查看：exInone l 归档文件</p>
</blockquote>
<p><span id="more-374"></span></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
&nbsp;
<span style="color: #666666; font-style: italic;">######################################</span>
<span style="color: #666666; font-style: italic;"># Several Extractors in One : exInOne</span>
<span style="color: #666666; font-style: italic;"># Author: pwwang</span>
<span style="color: #666666; font-style: italic;"># Site: http://pwwang.com</span>
<span style="color: #666666; font-style: italic;"># You can distribute it, modify it,</span>
<span style="color: #666666; font-style: italic;"># but keep this information</span>
<span style="color: #666666; font-style: italic;">######################################</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">%cmds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;"># 0-&gt;program 1-&gt;command for decompress 2-&gt;command for compress 3-&gt;list</span>
    <span style="color: #ff0000;">'tar.gz'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -zxvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -zcvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -ztvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'tar'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -xvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -cvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -tvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'tgz'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -zxvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -zcvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -ztvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'gz'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'gzip'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'gzip -d arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'gzip -cr arg2 &gt; arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'gzip -l arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'tar.bz2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jxvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jcvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jtvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'bz2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'bzip2,gtar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'bzip2 -d arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'bzip2 -cz arg2 &gt; arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jtvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'tar.bz'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jxvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jcvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jtvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'bz'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'bzip2,tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'bzip2 -d arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'bzip2 -z arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -jtvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'tar.Z'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'tar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -Zxvf arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -Zcvf arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -Ztvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'Z'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'compress'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'compress -d arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'compress -c arg2 &gt; arg1 '</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tar -Ztvf arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'zip'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'zip,unzip'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'unzip arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'zip arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'unzip -Zl arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'rar'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'rar'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'rar x arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'rar a arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'echo Unsupport listing rar content'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'lha'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'lha'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'lha -e arg1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'lha -a arg1 arg2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'lha -l arg1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'rpm'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #ff0000;">'rpm2cpio'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'rpm2cpio arg1 | cpio -div'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'echo Unsupport creating rpm archive'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'rpm2cpio arg1 | cpio -tiv'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_ext <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$)</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#get extension of a file name</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ext</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/.+\.(.+)$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ext</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> 
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ext</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ext</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'gz'</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$ext</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'bz2'</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$ext</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'bz'</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$ext</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'Z'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/.+\.(tar\.$ext)/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ext</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>    <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$ext</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> check4exes <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># Check for missing tools</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$bin</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">unless</span><span style="color: #009900;">&#40;</span> <span style="color: #000066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'|'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">`which $bin`</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=~/</span>\<span style="color: #339933;">/</span><span style="color: #0000ff;">$bin</span><span style="color: #009900;">&#40;</span>\<span style="color: #339933;">||</span><span style="color: #0000ff;">$)</span><span style="color: #339933;">/</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;exInOne needs $bin in your <span style="color: #000099; font-weight: bold;">\$</span>PATH to handle this format!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">exit</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> ifTypeSupport <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$)</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ex</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">exists</span> <span style="color: #0000ff;">$cmds</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$ex</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Unsupport file type: $ex <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">exit</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> checkFile <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$)</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#check file and return available extension</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$fn</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ex</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> get_ext<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$fn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;File: $fn<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    ifTypeSupport<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@b</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span> <span style="color: #009966; font-style: italic;">/,/</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$cmds</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$ex</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    check4exes<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$ex</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Main program</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$command</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$command</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #b1b100;">unless</span><span style="color: #009900;">&#40;</span> <span style="color: #000066;">defined</span> <span style="color: #0000ff;">$command</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$opts</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$command</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^-/</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$opts</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$command</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^-(.*)/</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$command</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$archive</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">unless</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$command</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^(l|x|a)$/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Usage: exInOne [-options] command archive [files...]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;commands:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    l   List<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    x   Extract<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    a   Add files or create new archive<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ext</span> <span style="color: #339933;">=</span> checkFile<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$archive</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$cmd</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span>    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$command</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'l'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$cmds</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$ext</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/arg1/$archive/</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$command</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'x'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$cmds</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$ext</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/arg1/$archive/</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$command</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'a'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$cmds</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$ext</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/arg1/$archive/</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/arg2/@files/</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/01/01/linux%e4%b8%8b%e9%80%9a%e7%94%a8%e8%a7%a3%e5%8e%8b%e7%bc%a9%e7%a8%8b%e5%ba%8fperl%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux下的批量改名工具Perl版</title>
		<link>http://pwwang.com/2008/11/27/linux%e4%b8%8b%e7%9a%84%e6%89%b9%e9%87%8f%e6%94%b9%e5%90%8d%e5%b7%a5%e5%85%b7/</link>
		<comments>http://pwwang.com/2008/11/27/linux%e4%b8%8b%e7%9a%84%e6%89%b9%e9%87%8f%e6%94%b9%e5%90%8d%e5%b7%a5%e5%85%b7/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 16:54:13 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=22</guid>
		<description><![CDATA[#!/usr/bin/perl -w 

&#160;

# order templates, do NOT modify this annotation!

<span class="readmore"><a href="http://pwwang.com/2008/11/27/linux%e4%b8%8b%e7%9a%84%e6%89%b9%e9%87%8f%e6%94%b9%e5%90%8d%e5%b7%a5%e5%85%b7/" title="Linux下的批量改名工具Perl版">Read More: 5973 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w </span>
&nbsp;
<span style="color: #666666; font-style: italic;"># order templates, do NOT modify this annotation!</span>
<span style="color: #666666; font-style: italic;">## #.&lt;SELF&gt;/#--&lt;SELF&gt;/#_&lt;SELF&gt;/pic_#/file_#/&lt;SELF&gt;.#/&lt;SELF&gt;_#// </span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> is_num<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">=~/^</span>d<span style="color: #339933;">+</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> is_inArray<span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ele</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@arr</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@arr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">return</span> <span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ele</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> lettersAdd<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$step</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$last</span> <span style="color: #339933;">=</span> <span style="color: #000066;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C&quot;</span><span style="color: #339933;">,</span><span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$step</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$last</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">122</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$str</span> <span style="color: #339933;">=</span> lettersAdd<span style="color: #009900;">&#40;</span><span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>  <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$last</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">26</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$str</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;a&quot;</span><span style="color: #339933;">.</span><span style="color: #000066;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$last</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">26</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$str</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$letters</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;C&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$last</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$str</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> print_line<span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | $str&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &quot;</span> x <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">59</span><span style="color: #339933;">-</span><span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;|n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> pathOf<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$f</span><span style="color: #339933;">=</span><span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">=~/^</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/.+</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">return</span> <span style="color: #ff0000;">&quot;$1/&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #ff0000;">&quot;./&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> clashOf<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$f</span><span style="color: #339933;">=</span><span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$p</span><span style="color: #339933;">=</span>pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$f</span><span style="color: #339933;">=~</span><span style="color: #000066;">s</span><span style="color: #339933;">/</span><span style="color: #0000ff;">$p</span><span style="color: #339933;">//;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">=~/^</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">..*</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$f</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> extOf<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$f</span><span style="color: #339933;">=</span><span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$p</span><span style="color: #339933;">=</span>pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$f</span><span style="color: #339933;">=~</span><span style="color: #000066;">s</span><span style="color: #339933;">/</span><span style="color: #0000ff;">$p</span><span style="color: #339933;">//;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">=~/^.*.</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> main_menu<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | MAIN MENU                                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Modify Whole File Name                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Replace                                                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 3. Change With Order Name                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 4. Add                                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 5. Delete                                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 6. Extended Functions                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | U. Goto Previous Menu                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> whole<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | MODIFY WHOLE FILE NAME                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Capitalize File Name                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Lowercase File Name                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 3. Capitalize First Letter of Each Word of File Name       |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 4. Lowercase First Letter of Each Word of File Name        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 5. Change File Name to                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 6. Caplitalize Extension                                   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 7. Lowercase Extension                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 8. Change Extension to                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | NOTE: File Name Does NOT Include Extension If Any          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | U. Goto Previous Menu                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | M. Goto Main Menu                                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> template<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | CHOOSE A ORDER TEMPLATE                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Input A Template And Add It To The List                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Input A Template(Do Not Add To The List)                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">@ts</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        print_line<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;. &quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$ts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | U. Goto Previous Menu                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | M. Goto Main Menu                                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_pattern<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a pattern: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_p</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_p</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009966; font-style: italic;">/(.+)/</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$the_p</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! The pattern is like [/txt/] .n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_p</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_replace<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a replace string: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_p</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_p</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #009966; font-style: italic;">/]+$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [/] is not allowed.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_p</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> input<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | INPUT FILES                                                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Input A Path And A Filter                               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Input Files Directly                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> preview_or_apply<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | PREVIEW OR APPLY                                           |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Preview                                                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Apply                                                   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> help<span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$last_menu</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | HELP                                                       |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | INPUT FILES:                                               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Input A Path And A Filter                               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    Input a path:                                           |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       1) path must exist                                   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       2) path can be either relative or absolute           |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       3) enter directly for current directory              |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    Input a filter:                                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       1) between // is a regular expression                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       2) front ! means except files meet the given pattern |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       3) enter directly for all the files                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       /.*.txt/  all .txt files                             |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       !/.*.txt/ all files but .txt                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Input Files Directly                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    1) folder:foo1|foo2|foo3                                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       for file 'foo1' 'foo2' 'foo3' in the same 'folder'   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    2) folder/foo1|folder/foo2|folder/foo3                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       for the same                                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | MAIN MENU                                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Modify Whole File Name                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    1) extension treated as a separate part                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    2) '/' is not allowed in file name and extension        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Replace                                                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    1) replace pattern should be a regular expression       |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       with '//'                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    2) '/' is not allowed in replace string                 |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    e.g.: foo1,foo2,foo3 -&gt; foo2,foo3,foo4                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |          pattern: /(d+)/ , replace string: ($1+1).&quot;</span>_<span style="color: #ff0000;">&quot;     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |          then foo1,foo2,foo3 -&gt; foo2_,foo3_,foo4_          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |          and then delete '_'(use function delete)          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 3. Change With Order Name                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    1) template                                             |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       &lt;SELF&gt; represents file name (exclude extension)      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       # for digits or characters to replace, it's required |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    2) the template will add to the list after you restart  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       this program if you choose this option               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    3) regulation of order                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       'a,b,c,d,e'                                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       all can be omitted, the default value is '0,1,1,0,0' |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       a: start number or letter of order                   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       b: number only, step of orde                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       c: maximal digit of number ignored if d set to 0     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       d: 1, fill other digit 'a'(for letter) or '0'(for    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |          number) if total digits less than maximum while   |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |          0 does NOT                                        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       e: if letters capitalize them                        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 4. Add                                                     |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    Input position and string to add                        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    'pos/str'                                               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    pos: add position, e.g.: '0' for front ;                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |         '1' for position between 1st and 2nd letter        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |         '-1' between last letter and letter before it      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    str: string to add, '/' is not allowed                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 5. Delete                                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    1) input a string to delete                             |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       'foo' or 'foo/0' or 'foo/1'                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       'foo' is an omitted form of 'foo/0'                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       '/0' means delete the first 'foo' in file name       |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       '/1' means delete all 'foo' in file name             |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    2) input position and length to delete                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       'pos/len'                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |       pos is as the same as it in 'Add' menu               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | !X !S. Goto Previous Menu                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | S. Save This Help to File 'smartrename.help'               |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;X&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;S&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>H<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&gt;smartrename.help&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | HELP                                                       |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | INPUT FILES:                                               |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 1. Input A Path And A Filter                               |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    Input a path:                                           |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       1) path must exist                                   |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       2) path can be either relative or absolute           |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       3) enter directly for current directory              |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    Input a filter:                                         |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       1) between // is a regular expression                |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       2) front ! means except files meet the given pattern |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       3) enter directly for all the files                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       /.*.txt/  all .txt files                             |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       !/.*.txt/ all files but .txt                         |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 2. Input Files Directly                                    |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    1) folder:foo1|foo2|foo3                                |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       for file 'foo1' 'foo2' 'foo3' in the same 'folder'   |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    2) folder/foo1|folder/foo2|folder/foo3                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       for the same                                         |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | MAIN MENU                                                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 1. Modify Whole File Name                                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    1) extension treated as a separate part                 |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    2) '/' is not allowed in file name and extension        |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 2. Replace                                                 |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    1) replace pattern should be a regular expression       |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       with '//'                                            |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    2) '/' is not allowed in replace string                 |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    e.g.: foo1,foo2,foo3 -&gt; foo2,foo3,foo4                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |          pattern: /(d+)/ , replace string: ($1+1).&quot;</span>_<span style="color: #ff0000;">&quot;     |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |          then foo1,foo2,foo3 -&gt; foo2_,foo3_,foo4_          |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |          and then delete '_'(use function delete)          |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 3. Change With Order Name                                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    1) template                                             |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       &lt;SELF&gt; represents file name (exclude extension)      |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       # for digits or characters to replace, it's required |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    2) the template will add to the list after you restart  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       this program if you choose this option               |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    3) regulation of order                                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       'a,b,c,d,e'                                          |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       all can be omitted, the default value is '0,1,1,0,0' |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       a: start number or letter of order                   |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       b: number only, step of orde                         |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       c: maximal digit of number ignored if d set to 0     |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       d: 1, fill other digit 'a'(for letter) or '0'(for    |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |          number) if total digits less than maximum while   |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |          0 does NOT                                        |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       e: if letters capitalize them                        |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 4. Add                                                     |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    Input position and string to add                        |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    'pos/str'                                               |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    pos: add position, e.g.: '0' for front ;                |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |         '1' for position between 1st and 2nd letter        |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |         '-1' between last letter and letter before it      |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    str: string to add, '/' is not allowed                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; | 5. Delete                                                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    1) input a string to delete                             |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       'foo' or 'foo/0' or 'foo/1'                          |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       'foo' is an omitted form of 'foo/0'                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       '/0' means delete the first 'foo' in file name       |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       '/1' means delete all 'foo' in file name             |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |    2) input position and length to delete                  |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       'pos/len'                                            |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |       pos is as the same as it in 'Add' menu               |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> H <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>H<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; [smartrename.help] saved!n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$last_menu</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$last_menu</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> deletion<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | DELETE OPTIONS                                             |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Input String to Delete                                  |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Extended Deletion                                       |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | U. Goto Previous Menu                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | M. Goto Main Menu                                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> extend<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | EXTENDED FUNCTIONS                                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 1. Reverse English Characters Case                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 2. Reverse Characters Order                                |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 3. Lowercase Letter After Capital Letter One By One        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    Like: AaBbCcDdEeFf                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 4. Capital Letter After Lowercase Letter One By One        |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |    Like: aAbBcCdDeEfF                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 5. The 1st Choice Act On Extension                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 6. The 2nd Choice Act On Extension                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 7. The 3rd Choice Act On Extension                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | 8. The 4th Choice Act On Extension                         |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; |                                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | U. Goto Previous Menu                                      |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | M. Goto Main Menu                                          |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | H. Help                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | X. Exit                                                    |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Your choice: &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$_</span><span style="color: #339933;">=</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_delete_string<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a string to delete: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/^</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^/</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?:/</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">|</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [foo/0] to delete [foo] once while [foo/1] delete all.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_extended_deletion<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input position and length to delete: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/^</span>d<span style="color: #339933;">+/</span>d<span style="color: #339933;">+</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [0/2] to delete the first 2 characters.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_menu<span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$ubound</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$m_ubound</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">@chars</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span> <span style="color: #009966; font-style: italic;">/,/</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$m_chars</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$choice</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$menu</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_num <span style="color: #0000ff;">$choice</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$choice</span><span style="color: #339933;">&gt;=</span><span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$choice</span><span style="color: #339933;">&lt;=</span><span style="color: #0000ff;">$ubound</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Unknown choice.n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$choice</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;X&quot;</span> <span style="color: #b1b100;">and</span> is_inArray<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;X&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@chars</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$choice</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;H&quot;</span> <span style="color: #b1b100;">and</span> is_inArray<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;H&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@chars</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">return</span> get_menu<span style="color: #009900;">&#40;</span>help<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$choice</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;M&quot;</span>  <span style="color: #b1b100;">and</span> is_inArray<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;M&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@chars</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">return</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$choice</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;U&quot;</span>  <span style="color: #b1b100;">and</span> is_inArray<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;U&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@chars</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">goto</span> RESTART <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$m_prev</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;input&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">goto</span> REDO <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$m_prev</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">return</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$m_prev</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$menu</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Unknown choice.n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$choice</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_path<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a path: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$the_path</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #0000ff;">$the_path</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">return</span> <span style="color: #ff0000;">&quot;./&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_path</span><span style="color: #339933;">=~/^</span>s<span style="color: #339933;">*</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;"># if no input, set path current directory</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>e <span style="color: #0000ff;">$the_path</span> <span style="color: #b1b100;">and</span> <span style="color: #339933;">-</span>d <span style="color: #0000ff;">$the_path</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Nonexistent path or non-directory path. n&quot;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_path</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;/&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_path</span><span style="color: #339933;">=~/^.*</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #009966; font-style: italic;">/]$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_path</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_filter<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a filter: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$the_filter</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #0000ff;">$the_filter</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_filter</span><span style="color: #339933;">=~/^!?/.+/</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_filter</span><span style="color: #339933;">=~/^</span>s<span style="color: #339933;">*</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;"># for all the files</span>
            <span style="color: #0000ff;">$the_filter</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;/^.*$/&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! The filter pattern is [!?/.+/] , e.g.:n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [!/.*.txt/] for all but .txt files.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_filter</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_files<span style="color: #009900;">&#123;</span>
    REENTER<span style="color: #339933;">:</span><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input files: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$the_files</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #0000ff;">$the_files</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_path</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$the_files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_files</span><span style="color: #339933;">=~/^</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.+</span><span style="color: #009900;">&#41;</span><span style="color: #000066;">s</span><span style="color: #339933;">*:</span><span style="color: #000066;">s</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.+</span><span style="color: #009900;">&#41;</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Please check if [$_] exists, input sample: n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [test:1.txt|2.txt] for 1.txt and 2.txt in directory;n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [test/1.txt|test/2.txt] for the same.n&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #0000ff;">@the_filess</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span> <span style="color: #009966; font-style: italic;">/s*|s*/</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$the_files</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@the_filess</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_path</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;$the_path/$_&quot;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!-</span>e <span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Please check if [$_] exists, input sample: n&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [test:1.txt|2.txt] for 1.txt and 2.txt in directory;n&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [test/1.txt|test/2.txt] for the same.n&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">next</span> REENTER<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">@the_filess</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_if_apply<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Apply(y) or discard(n) the results? &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$the_apply</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #0000ff;">$the_apply</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_apply</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$the_apply</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! Input [y] or [n].n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_apply</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_file_or_ext<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$flag</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$flag</span> <span style="color: #339933;">?</span> <span style="color: #ff0000;">&quot;file name&quot;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;extension&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a new $f: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$the_f</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #0000ff;">$the_f</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_f</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #009966; font-style: italic;">/]+$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [/] is not allowed in $f.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_f</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_input_template<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input a new template: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_t</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$the_t</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^/</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #666666; font-style: italic;">#[^/]*$/){</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! [#] is required and [/] is not allowed.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$the_t</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_template<span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp_choice</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;template&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> get_input_template<span style="color: #339933;">;</span>
        <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;$0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">@self_content</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;SELF&gt;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>SELFBAK<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&gt;$0.bak&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> SELFBAK <span style="color: #0000ff;">@self_content</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>SELFBAK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@self_content</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/^</span><span style="color: #666666; font-style: italic;">## .+///){</span>
                <span style="color: #000066;">s</span><span style="color: #339933;">/////</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">///;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^s+template =&gt; (d+),/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #009966; font-style: italic;">s/($1)/$1+1/e</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&gt;$0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> SELF <span style="color: #0000ff;">@self_content</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> get_input_template<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$temp_choice</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$temp</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_regular<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input A Regulation of Order: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^(?:d+|[a-z]+)?(?:,d+)?(?:,d+)?(?:,(?:0|1))?(?:,(?:0|1))?$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! e.g.: [a,1,2,1,1] makes orders AA, AB, AC....n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> get_add<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; &gt;&gt; Input position and string to add: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">chomp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/^-?</span>d<span style="color: #339933;">+/</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #009966; font-style: italic;">/]+$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; !! e.g.: [0/foo] to add [foo] to the front.n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #0000ff;">%m_ubound</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>   input <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
                main_menu <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span>
                whole <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span>
                preview_or_apply <span style="color: #339933;">=&gt;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
                template <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">,</span>
                deletion <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
                extend <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #0000ff;">%m_prev</span> <span style="color: #339933;">=</span>   <span style="color: #009900;">&#40;</span>   main_menu <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;input&quot;</span><span style="color: #339933;">,</span>
                whole <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #339933;">,</span>
                template <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #339933;">,</span>
                deletion <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #339933;">,</span>
                extend <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #0000ff;">%m_chars</span> <span style="color: #339933;">=</span>  <span style="color: #009900;">&#40;</span>   input <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;H,X&quot;</span><span style="color: #339933;">,</span>
                main_menu <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;U,H,X&quot;</span><span style="color: #339933;">,</span>
                whole <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;U,M,H,X&quot;</span><span style="color: #339933;">,</span>
                template <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;U,M,H,X&quot;</span><span style="color: #339933;">,</span>
                deletion <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;U,M,H,X&quot;</span><span style="color: #339933;">,</span>
                extend <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;U,M,H,X&quot;</span><span style="color: #339933;">,</span>
                preview_or_apply <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;H,X&quot;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #339933;">,</span> <span style="color: #0000ff;">$0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009999;">&lt;SELF&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">chomp</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #666666; font-style: italic;">## (.+)///){</span>
        <span style="color: #0000ff;">@ts</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span> <span style="color: #339933;">///,</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>SELF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
RESTART<span style="color: #339933;">:</span> <span style="color: #0000ff;">$input_menu</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;input&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">%out_files</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># get input files</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$input_menu</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$path</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#038;get_path;</span>
    <span style="color: #0000ff;">$filter</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#038;get_filter;</span>
    <span style="color: #000066;">opendir</span><span style="color: #009900;">&#40;</span>DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">=</span><span style="color: #000066;">readdir</span><span style="color: #009900;">&#40;</span>DIR<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$filter</span><span style="color: #339933;">=~/^!/</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.+</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">push</span> <span style="color: #0000ff;">@files</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">!~/</span><span style="color: #0000ff;">$1</span><span style="color: #339933;">/</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;..&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$filter</span><span style="color: #339933;">=~/^</span><span style="color: #009966; font-style: italic;">/(.+)/</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">push</span> <span style="color: #0000ff;">@files</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">=~/</span><span style="color: #0000ff;">$1</span><span style="color: #339933;">/</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$file</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;..&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">closedir</span><span style="color: #009900;">&#40;</span>DIR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#038;get_files;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | FILES TO RENAME                                            |n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">sort</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$a</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">cmp</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$b</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$a</span> <span style="color: #339933;">&lt;=&gt;</span> <span style="color: #0000ff;">$b</span><span style="color: #009900;">&#125;</span> <span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>print_line<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span> 
&nbsp;
REDO<span style="color: #339933;">:</span> <span style="color: #0000ff;">$main_input</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;main_menu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$main_input</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$whole_choice</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;whole&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">ucfirst</span><span style="color: #009900;">&#40;</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">lcfirst</span><span style="color: #009900;">&#40;</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$file_name</span> <span style="color: #339933;">=</span> get_file_or_ext<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$file_name</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$whole_choice</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$file_name</span> <span style="color: #339933;">=</span> get_file_or_ext<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">$file_name</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$main_input</span><span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$pattern</span> <span style="color: #339933;">=</span> get_pattern<span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$replace</span> <span style="color: #339933;">=</span> get_replace<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$file_name</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">#$file_name =~ s/$pattern/($replace=~s/&lt;(d+)&gt;/$$1/g)/e;</span>
        <span style="color: #666666; font-style: italic;">#eval('$file_name =~ s/$pattern/$replace/e;');</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$replace</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$file_name</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/$pattern/eval($replace)/e</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$file_name</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/$pattern/$replace/</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$file_name</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$main_input</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$tmp</span> <span style="color: #339933;">=</span> get_template<span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$reg</span> <span style="color: #339933;">=</span> get_regular<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$step</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$len</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$iffill</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ifcap</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$reg</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^(d+|[a-z]+)?(?:,(d+))?(?:,(d+))?(?:,(0|1))?(?:,(0|1))?$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$start</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$step</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$step</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$len</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$len</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$iffill</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$iffill</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$ifcap</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ifcap</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$tmp_clash</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$tmp</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$iffill</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$len</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$start</span> <span style="color: #339933;">=</span> <span style="color: #000066;">sprintf</span><span style="color: #009900;">&#40;</span>is_num<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;a&quot;</span> x <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$len</span><span style="color: #339933;">-</span><span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$start</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>is_num<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ifcap</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$start</span> <span style="color: #339933;">=</span> <span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$start</span> <span style="color: #339933;">=</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #0000ff;">$tmp_clash</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/#/$start/g</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$tmp_clash</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/&lt;SELF&gt;/$clash/g</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$tmp_clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_num<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$start</span> <span style="color: #339933;">+=</span> <span style="color: #0000ff;">$step</span> <span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$start</span> <span style="color: #339933;">=</span> lettersAdd<span style="color: #009900;">&#40;</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$step</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$main_input</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$add</span> <span style="color: #339933;">=</span> get_add<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$pos</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$str</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$add</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-?</span>d<span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #009966; font-style: italic;">/]+)$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$pos</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$str</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$main_input</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$delete</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;deletion&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$delete</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$d_str</span> <span style="color: #339933;">=</span> get_delete_string<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$delete_str</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$delete_global</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$d_str</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^/</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?:/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">|</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$delete_global</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$delete_global</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$delete_global</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/$delete_str//g</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/$delete_str//</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$d_ext</span> <span style="color: #339933;">=</span> get_extended_deletion<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$d_pos</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$d_len</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$d_ext</span> <span style="color: #339933;">=~</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span>d<span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span>d<span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span><span style="color: #0000ff;">$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$d_pos</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$d_len</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;extend&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$c</span> <span style="color: #b1b100;">eq</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> <span style="color: #000066;">reverse</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">split</span> <span style="color: #339933;">//,</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$c</span> <span style="color: #b1b100;">eq</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> <span style="color: #000066;">reverse</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">split</span> <span style="color: #339933;">//,</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$e_choice</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$clash</span> <span style="color: #339933;">=</span> clashOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>extOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span>length<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">?</span><span style="color: #000066;">uc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$first_cap</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #0000ff;">$first_cap</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> pathOf<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$clash</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #0000ff;">$app_input</span> <span style="color: #339933;">=</span> get_menu<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;preview_or_apply&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$app_input</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | RESULTS PREVIEW                                            |n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">sort</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$a</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">cmp</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$b</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$a</span> <span style="color: #339933;">&lt;=&gt;</span> <span style="color: #0000ff;">$b</span><span style="color: #009900;">&#125;</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%out_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; = [$_] =&gt; [$out_files{$_}]n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+nn&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$app_choice</span> <span style="color: #339933;">=</span> get_if_apply<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$app_choice</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">goto</span> REDO<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; | RESULTS APPLYING                                           |n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">sort</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$a</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">cmp</span> <span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$b</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$a</span> <span style="color: #339933;">&lt;=&gt;</span> <span style="color: #0000ff;">$b</span><span style="color: #009900;">&#125;</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%out_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!-</span>e <span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">and</span> <span style="color: #000066;">rename</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$_</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$out_files</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; ~ &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; ! &quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;[$_] =&gt; [$out_files{$_}]n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot; +------------------------------------------------------------+n&quot;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;n &gt;&gt; Done! n&quot;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000066;">goto</span> RESTART<span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2008/11/27/linux%e4%b8%8b%e7%9a%84%e6%89%b9%e9%87%8f%e6%94%b9%e5%90%8d%e5%b7%a5%e5%85%b7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

