目录:
- 收集独特的行
- 删除多个空行
- 很容易忘记Perl的排序功能是多么有用。下面的程序将整个文件读入数组,对数组进行排序,然后打印结果。简短而又甜美,而且非常高效:
- 你是否曾经想从文件中只读几行,而不是所有的东西?以下程序只打印一系列的行。你用两个参数运行程序:你想要的范围和文件名。例如,如果您将程序命名为“showline”,并且想要查看somefile的第10至20行。 txt文件,您可以使用以下命令行:
- 按大小列出目录
- foreach $ k(sort {$ i {$ b} <=&gt $ i {$ a}} keys%i)
- ($ Name,$ Ext)= split( /。/,$ FullName,2); <@ push(@Temp,“$ Extt $ FullName”);
- $ o = eval($ i);打印“回答= $”;运行程序时,可以输入如下内容:
- 以下程序会生成随机密码。然而,这些密码不是一堆难以记忆的字母,而是有助于记忆的,因为它们出现在可以发音的辅音和元音对中。通过串起几个愚蠢的音节,您可以生成易于记忆的无意义的短语。
- {print $ c [int(rand(20))],$ v [int(rand(5))] }
有些人认为短程序不是很好,但Perl不是这样。只是几行Perl代码可以走很长的路。本文列出了一些方便的小巧Perl程序。
收集独特的行
如果你的文本文件有许多行是重复的,而你只想看到独特的行,你可以将它们收集到一个数组中(在这种情况下,它被称为@Unique),下面的程序:
<! - 1 - >打开(IN,“somefile。txt”); @独特=();
while(){unless($ i {$ _} ++){push(@Unique,$ _)}}
这里的技巧是$ i {$ _} ++第一次返回0你用$ _作为键创建一个键值对,然后再创建一个非零值。
删除多个空行
某些文本文件有多个连续的空行,这使得它们难以阅读,特别是在小屏幕上。以下程序将打印一个文本文件,将两个或多个空白行的所有实例压缩到一个空白行中。
<! - 2 - >注意: 一个空白行可以有空白字符,比如空格和制表符,但是没有可显示的字符。
打开(IN,“somefile。txt”); $ PrevBlank = 0; while(){
if(/ S / or!$ PrevBlank){print $ _}
$ PrevBlank = / ^ s * $ /
}
如果行中有非空白字符,或者前一行不是空白,则前面示例中的if语句为真。 $ PrevBlank赋值告诉你当前行是否为空,意味着它有零个或多个空白字符,而没有其他的字符。
很容易忘记Perl的排序功能是多么有用。下面的程序将整个文件读入数组,对数组进行排序,然后打印结果。简短而又甜美,而且非常高效:
打开(IN,“somefile。txt”);
print sort();
从一个文件打印一系列的行
你是否曾经想从文件中只读几行,而不是所有的东西?以下程序只打印一系列的行。你用两个参数运行程序:你想要的范围和文件名。例如,如果您将程序命名为“showline”,并且想要查看somefile的第10至20行。 txt文件,您可以使用以下命令行:
showline 10-20 somefile。 txt
以下程序打印一系列行:
打开(IN,$ ARGV [1])或死“无法读取$文件。 N”;
($ Start,$ Stop)= split(/ - /,$ ARGV [0]); ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =;仅列出目录中的文件
有时,您可能希望忽略目录中的子目录,只关注文件。您可以使用以下-f文件测试来列出目录中的所有文件:
foreach $ f(){if(-f $ f){print“$ fn”}}
按大小列出目录
要排序,目录列表除了它的文件名之外的任何东西,程序必须保存列表中的名称和其他项目组成的记录列表。哈希对于这种使用键(文件名)和值(另一个目录信息)进行记录的列表很有用。以下程序会创建一个散列,列出目录中每个文件的大小,然后对这些项目进行排序以便输出。 (你可以很容易地修改这个程序来按日期而不是按大小进行排序。)
foreach $ f(){$ i {$ f} = -s $ f};
foreach $ k(sort {$ i {$ b} <=> $ i {$ a}} keys%i)
{printf“%8d%sn”,$ i {$ k},$ k }
按扩展名对目录进行排序
按文件名的一部分进行排序比按文件大小排序或按文件修改日期排序要困难得多。下面的程序将文件名分为两部分,然后按第二部分分类。如果您在UNIX或Macintosh系统上运行Perl,则该程序仅在文件名没有句点或句点的情况下才能工作:
foreach $ FullName(){
($ Name,$ Ext)= split( /。/,$ FullName,2); <@ push(@Temp,“$ Extt $ FullName”);
}
foreach $ Val(sort(@Temp)){
($ Ext,$ FullName)= split(/ t /,$ Val);
打印“$ FullNamen”;
}
创建一个简单的计算器
需要一个简单易用的计算器来剔除一些快速而肮脏的数学?下面的程序使用Perl的eval函数来输出你输入的任何等式的答案。要结束程序,输入一个空白行。这是用于创建自己的计算器的程序:
while(){
$ i = $ _;格格($ I);除非($ i){last}
$ o = eval($ i);打印“回答= $”;运行程序时,可以输入如下内容:
((2 ** 8)+(3 ** 8))
,得到如下结果:随机化列表
在Perl中,生成随机数很容易,但随机化数组的顺序并不那么简单。不过,你可以使用拼接函数从数组中拉出一个随机元素,然后将元素放入另一个数组中。以下程序随机化列表@MyList:
my @TempList =(); (@MyList)
{push(@TempList,splice(@MyList,rand(@MyList),1))}
@MyList = @TempList;
这里的技巧是rand(@MyList)从0到@MyList中的元素数量之间选择一个数字,splice将这个随机数字改为一个整数。
生成随机助记密码
试图说服计算机用户想出不容易被猜出的密码是系统管理员最具挑战性的工作之一。人们似乎总是坚持使用他们的生日或宠物的名字作为密码 - 违反安全就变成了孩子的游戏。
以下程序会生成随机密码。然而,这些密码不是一堆难以记忆的字母,而是有助于记忆的,因为它们出现在可以发音的辅音和元音对中。通过串起几个愚蠢的音节,您可以生成易于记忆的无意义的短语。
密码的每个音节可以代表100个数字中的任何一个;因此,一个四个字节的密码,如
votahubo,
是程序生成的1亿个(100到4个)密码之一。让系统管理员分配这些密码比让用户选择他们自己的,容易猜到的密码提供了更多的安全性:
print“输入种子编号:”; $ S =; srand($ s ^ time);
@ c = split(/ * /,“bcdfghjklmnprstvwxyz”);
@ v = split(/ * /,“aeiou”);对于($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int(rand(20))],$ v [int(rand(5))] }
这个程序的前两行初始化随机数的种子,接下来的两行创建包含20个辅音(减号
q
)和5个元音字母表的列表。 for循环只是打印四个音节。