📄 filecontents.mht
字号:
</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> < <FONT color=3D#cdcd00>1</FONT> && =
<FONT color=3D#00ffff>(</FONT>$adage =3D $_<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#ffa500>while</FONT> =
<><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 &shuffle sub from Chapter 4
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT><INPUT><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 =
<HANDLE> <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 <HANDLE><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><$data_file><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><$data_file><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>"< =
$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>"+>$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>"< $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><INFILE><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>"< $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 + -