⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filecontents.mht

📁 Perl 编程技巧大全。适合初学者阅读。
💻 MHT
📖 第 1 页 / 共 5 页
字号:
</FONT>$/ =3D <FONT color=3D#00cd00>"%%\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#cdad00>@ARGV</FONT> =3D <FONT =
color=3D#ff7f50>qw</FONT><FONT color=3D#00ffff>(</FONT> =
/usr/share/games/fortunes <FONT color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>srand</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>rand</FONT><FONT color=3D#00ffff>(</FONT>$.<FONT =
color=3D#00ffff>)</FONT> &lt; <FONT color=3D#cdcd00>1</FONT> &amp;&amp; =
<FONT color=3D#00ffff>(</FONT>$adage =3D $_<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#ffa500>while</FONT> =
&lt;&gt;<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> $adage<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN451>Randomizing All Lines</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
  <TBODY>
  <TR>
    <TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
# assumes the &amp;shuffle sub from Chapter 4
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;INPUT&gt;<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ff7f50>push</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@lines</FONT>, $_<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#cdad00>@reordered</FONT> =3D shuffle<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdad00>@lines</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>foreach</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@reordered</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
    <FONT color=3D#ff7f50>print</FONT> OUTPUT $_<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN454>Reading a Particular Line in a =
File</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
  <TBODY>
  <TR>
    <TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
# looking for line number $DESIRED_LINE_NUMBER
</FONT>$. =3D <FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>do</FONT> <FONT color=3D#00ffff>{</FONT> $LINE =3D =
&lt;HANDLE&gt; <FONT color=3D#00ffff>}</FONT> <FONT =
color=3D#ffa500>until</FONT> $. =3D=3D $DESIRED_LINE_NUMBER || <FONT =
color=3D#98fb98>eof</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#cdad00>@lines</FONT> =3D &lt;HANDLE&gt;<FONT =
color=3D#00ffff>;</FONT>
$LINE =3D <FONT color=3D#cdad00>$lines</FONT><FONT =
color=3D#00ffff>[</FONT>$DESIRED_LINE_NUMBER<FONT =
color=3D#00ffff>];</FONT>
<FONT color=3D#bebebe>#-----------------------------
# usage: build_index(*DATA_HANDLE, *INDEX_HANDLE)
</FONT><FONT color=3D#ffa500>sub</FONT> build_<FONT =
color=3D#98fb98>index</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$data_file</FONT>  =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$index_file</FONT> =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$offset</FONT> =
    =3D <FONT color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>;</FONT>

    <FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;$data_file&gt;<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#00ffff>{</FONT>
        <FONT color=3D#ff7f50>print</FONT> $index_file <FONT =
color=3D#98fb98>pack</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"N"</FONT>, $offset<FONT color=3D#00ffff>);</FONT>
        $offset =3D <FONT color=3D#98fb98>tell</FONT><FONT =
color=3D#00ffff>(</FONT>$data_file<FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#00ffff>}</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># usage: line_with_index(*DATA_HANDLE, =
*INDEX_HANDLE, $LINE_NUMBER)
# returns line or undef if LINE_NUMBER was out of range
</FONT><FONT color=3D#ffa500>sub</FONT> line_with_<FONT =
color=3D#98fb98>index</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$data_file</FONT>   =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$index_file</FONT>  =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$line_number</FONT> =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>

    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$size</FONT><FONT color=3D#00ffff>;</FONT>               =
<FONT color=3D#bebebe># size of an index entry
</FONT>    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$i_offset</FONT><FONT color=3D#00ffff>;</FONT>           =
<FONT color=3D#bebebe># offset into the index of the entry
</FONT>    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$entry</FONT><FONT color=3D#00ffff>;</FONT>              =
<FONT color=3D#bebebe># index entry
</FONT>    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$d_offset</FONT><FONT color=3D#00ffff>;</FONT>           =
<FONT color=3D#bebebe># offset into the data file
</FONT>
    $size =3D <FONT color=3D#98fb98>length</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#98fb98>pack</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"N"</FONT>, <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>));</FONT>
    $i_offset =3D $size * <FONT =
color=3D#00ffff>(</FONT>$line_number<FONT color=3D#cdcd00>-1</FONT><FONT =
color=3D#00ffff>);</FONT>
    <FONT color=3D#98fb98>seek</FONT><FONT =
color=3D#00ffff>(</FONT>$index_file, $i_offset, <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>return</FONT><FONT =
color=3D#00ffff>;</FONT>
    <FONT color=3D#98fb98>read</FONT><FONT =
color=3D#00ffff>(</FONT>$index_file, $entry, $size<FONT =
color=3D#00ffff>);</FONT>
    $d_offset =3D <FONT color=3D#98fb98>unpack</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"N"</FONT>, $entry<FONT =
color=3D#00ffff>);</FONT>
    <FONT color=3D#98fb98>seek</FONT><FONT =
color=3D#00ffff>(</FONT>$data_file, $d_offset, <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#ffa500>return</FONT> <FONT =
color=3D#ff7f50>scalar</FONT><FONT =
color=3D#00ffff>(</FONT>&lt;$data_file&gt;<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># usage:
</FONT><FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>FILE, <FONT color=3D#00cd00>"&lt; =
$file"</FONT><FONT color=3D#00ffff>)</FONT>         <FONT =
color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> <FONT =
color=3D#00cd00>"Can't open $file for reading: $!\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>open</FONT><FONT color=3D#00ffff>(</FONT>INDEX, =
<FONT color=3D#00cd00>"+&gt;$file.idx"</FONT><FONT =
color=3D#00ffff>)</FONT>
        <FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Can't open $file.idx for read/write: =
$!\n"</FONT><FONT color=3D#00ffff>;</FONT>
build_<FONT color=3D#98fb98>index</FONT><FONT =
color=3D#00ffff>(</FONT>*FILE, *INDEX<FONT color=3D#00ffff>);</FONT>
$line =3D line_with_<FONT color=3D#98fb98>index</FONT><FONT =
color=3D#00ffff>(</FONT>*FILE, *INDEX, $seeking<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>DB_File</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT color=3D#b2dfee>Fcntl</FONT><FONT =
color=3D#00ffff>;</FONT>

$tie =3D <FONT color=3D#ff7f50>tie</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdad00>@lines</FONT>, $FILE, =
<FONT color=3D#00cd00>"DB_File"</FONT>, O_RDWR, <FONT =
color=3D#cdcd00>0666</FONT>, $DB_RECNO<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT><FONT =
color=3D#43cd80> </FONT>
    <FONT color=3D#00cd00>"Cannot open file $FILE: $!\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe># extract it
</FONT>$line =3D <FONT color=3D#cdad00>$lines</FONT><FONT =
color=3D#00ffff>[</FONT>$sought - <FONT color=3D#cdcd00>1</FONT><FONT =
color=3D#00ffff>];</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch08/print_line-v1">dow=
nload the following standalone program</A></FONT>
#!/usr/bin/perl -w
# print_line-v1 - linear style
</FONT>
<FONT color=3D#cdad00>@ARGV</FONT> =3D=3D <FONT color=3D#cdcd00>2</FONT> =
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> <FONT =
color=3D#00cd00>"usage: print_line FILENAME LINE_NUMBER\n"</FONT><FONT =
color=3D#00ffff>;</FONT>

<FONT color=3D#00ffff>(</FONT>$filename, $line_number<FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#cdad00>@ARGV</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>open</FONT><FONT color=3D#00ffff>(</FONT>INFILE, =
<FONT color=3D#00cd00>"&lt; $filename"</FONT><FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#98fb98>or</FONT> <FONT =
color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"Can't open $filename =
for reading: $!\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;INFILE&gt;<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#00ffff>{</FONT>
    $line =3D $_<FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>last</FONT> <FONT color=3D#ffa500>if</FONT> $. =
=3D=3D $line_number<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$. !=3D =
$line_number<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"Didn't find =
line $line_number in $filename\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ff7f50>print</FONT><FONT color=3D#00ffff>;</FONT>

<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch08/print_line-v2">dow=
nload the following standalone program</A></FONT>
#!/usr/bin/perl -w
# print_line-v2 - index style
# build_index and line_with_index from above
</FONT><FONT color=3D#cdad00>@ARGV</FONT> =3D=3D <FONT =
color=3D#cdcd00>2</FONT> <FONT color=3D#98fb98>or</FONT>
    <FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"usage: =
print_line FILENAME LINE_NUMBER"</FONT><FONT color=3D#00ffff>;</FONT>

<FONT color=3D#00ffff>(</FONT>$filename, $line_number<FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#cdad00>@ARGV</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>open</FONT><FONT color=3D#00ffff>(</FONT>ORIG, =
<FONT color=3D#00cd00>"&lt; $filename"</FONT><FONT =
color=3D#00ffff>)</FONT><FONT color=3D#43cd80> </FONT>
        <FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Can't open $filename for reading: $!"</FONT><FONT =
color=3D#00ffff>;</FONT>

<FONT color=3D#bebebe># open the index and build it if necessary
# there's a race condition here: two copies of this
# program can notice there's no index for the file and
# try to build one.  This would be easily solved with
# locking
</FONT>$indexname =3D <FONT =
color=3D#00cd00>"$filename.index"</FONT><FONT color=3D#00ffff>;</FONT>
sysopen<FONT color=3D#00ffff>(</FONT>IDX, $indexname, =
O_CREAT|O_RDWR<FONT color=3D#00ffff>)</FONT>
         <FONT color=3D#98fb98>or</FONT> <FONT =
color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"Can't open $indexname =
for read/write: $!"</FONT><FONT color=3D#00ffff>;</FONT>
build_<FONT color=3D#98fb98>index</FONT><FONT =
color=3D#00ffff>(</FONT>*ORIG, *IDX<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#ffa500>if</FONT> <FONT color=3D#b2dfee>-z</FONT> =
$indexname<FONT color=3D#00ffff>;</FONT>  <FONT color=3D#bebebe># XXX: =
race unless lock
</FONT>
$line =3D line_with_<FONT color=3D#98fb98>index</FONT><FONT =
color=3D#00ffff>(</FONT>*ORIG, *IDX, $line_number<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"Didn't find line =
$line_number in $filename"</FONT> <FONT color=3D#ffa500>unless</FONT> =
<FONT color=3D#ff7f50>defined</FONT> $line<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> $line<FONT color=3D#00ffff>;</FONT>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -