个人理财 调入十个简短有用的Perl程序 - 傻瓜

调入十个简短有用的Perl程序 - 傻瓜

目录:

Anonim

有些人认为短程序不是很好,但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循环只是打印四个音节。

调入十个简短有用的Perl程序 - 傻瓜

编辑的选择

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

是SketchUp非常有用的一部分,他们可以让你的生活变得更轻松。以下是如何在Sketchup中添加新图层以及如何将实体移动到不同图层的方法。添加新图层按照以下步骤将图层添加到SketchUp文件:选择“窗口”→“图层”。图层...

全部关于地理位置快照和SketchUp - 虚拟

全部关于地理位置快照和SketchUp - 虚拟

当您将地理位置快照导入SketchUp ,您可以访问Google庞大的地理数据存储库;快照不仅仅是漂亮的图片:导入快照地理位置自动定位您的位置。这意味着快照设置您的模型的经纬度,并定位在正确的主要方向。任何阴影研究你...

如何在SketchUp中使用场景动画区域

如何在SketchUp中使用场景动画区域

将区域视图与场景组合在一起以创建动画展示您的SketchUp模型都是一种有用且令人印象深刻的方式。基本的想法是,您可以使用场景来创建动画,其中您的剖面在您的模型中移动。以下是您可能需要使用此技巧的几个原因:如果...

编辑的选择

Drupal友好的网页寄存公司 - 傻瓜

Drupal友好的网页寄存公司 - 傻瓜

网页寄存公司为您提供访问Web服务器,您可以在其中安装Drupal并使您的网站在Web上可见。一些公司为您安装Drupal或为您提供一键安装,为您节省了一些工作量。如果您决定自己跳过Drupal的安装,请考虑通过以下方式之一获取帐户...

Drupal花园功能 - 傻瓜

Drupal花园功能 - 傻瓜

让您有机会查看和使用所有Drupal花园功能,可以创建一个新的站点,然后选择自定义选项而不是其中一个已安装的模板:确保已经登录,然后单击我的站点链接。这样做打开了Drupal花园站点经理。点击创建...

Drupal园林主题生成器 - 傻瓜

Drupal园林主题生成器 - 傻瓜

Drupal花园设置完成后,有一些乐趣和玩你的网站上的主题。使用Drupal Gardens Theme Builder控制网站的外观是与安装Drupal自身副本不同的主要方式。但是你不会错过太多...

编辑的选择

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

很可能您已经在尼康D5300上播放了播放模式。但是,在数码相机上查看照片有不同的选项。对于正常播放 - 即每次只能查看一张照片 - 请执行以下步骤:

如何自定义尼康D3300的优化校准 - 傻瓜

如何自定义尼康D3300的优化校准 - 傻瓜

当您使用尼康D3300的内置原始处理器,您可以尝试不同的优化校准设置,了解每个设置对图像的影响。当您使用免费的Nikon软件Nikon ViewNX处理图像时,您可以选择相同的选项。该程序的原始转换器,以及在Adobe Photoshop中找到的那些...

如何在HDMI屏幕上显示实时预览预览 - 假人

如何在HDMI屏幕上显示实时预览预览 - 假人

尼康D7100相机连接到HDMI(高清晰度多媒体接口)设备,以在该屏幕上查看实时显示输出。摄影师经常使用此功能,因为摄影师需要比相机显示器提供更大的主题。使用此选项时,会出现一些问题:...