常用Perl命令行参数应用的分析

技术常用Perl命令行参数应用的分析本篇文章为大家展示了常用Perl命令行参数应用的分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Perl命令行应用介绍Perl有很多Perl

本文向您展示了对常见Perl命令行参数应用的分析。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

Perl命令行应用介绍

Perl有很多Perl命令行参数。通过它,我们有机会编写更简单的程序。在本文中,我们将了解一些常用的参数。

SafetyNetOptions

当使用Perl尝试一些聪明(或愚蠢)的想法时,不可避免地会出错。有经验的Perl程序员经常使用三个参数来提前找出错误。

-C是* * *。这个参数编译perl程序,但并不真正运行它。它检查所有语法错误。每次修改Perl程序后,我都会立即使用它来查找任何语法错误。

代码:

$perl-cprogram.pl

-W是第二个参数。它会提示你任何潜在的问题。5.6.0之后的Perl版本已经使用了警告;已替换-W .您应该使用usewarnings,因为它比-W更灵活.

-T是第三个参数。它将perl置于tain模式。在这种模式下,Perl将质疑来自程序外部的任何数据。例如,从Perl命令行、外部文件或CGI程序中读取的数据将在-T模式下被污染。

TED数据不能用来和外界互动。例如,使用系统调用中使用的文件名并打开。在perlsec文档中有更多关于什么数据会被污染的例子。

如果你想使用污点数据,你需要污点数据。污点是通过正则表达式实现的。这里我不会过多谈论污点模式。如果你想写的程序(比如CGI程序)需要接收用户不可知的输入,我推荐污点模式。

-d,perldefood,这里值得一提,但我们不能处理它。我建议阅读文档‘perldocperdebug’或RichardFoley的PerlDebuggerPocketReference。

Command-LinePrograms

下列Perl参数可以使简短的Perl程序在Perl命令行上运行。-e可以让Perl程序在Perl命令行上运行。例如,我们可以在Perl命令行上运行“HelloWorld”程序,而无需将其写入文件。

代码:

$perl-e'print'HelloWorld\n '

Multiple -e也可以同时使用,运行顺序取决于它出现的位置。

代码:

$ perl-e ' print ' hello ';-电子版《世界》

像所有的Perl程序一样,只需要程序的* * *行不需要用;结束。

虽然您也可以像往常一样引用模块,-M使它更容易。

代码:

$ perl-mlwp :3360 simple-e ' print ' http://www . example.com '

-M模块名与使用模块名相同。如果不想引入模块的默认值,可以使用-m-m模块名称与使用模块名称()相同。例如,在下面的示例中,由于默认情况下引入了head函数,所以在使用-m时不会使用它,导致没有输出。

代码:

$ perl-mlwp :3360 simple-e ' print ' http://www . example.com '

-m和-M使用=来介绍一个模块的特殊功能。

代码:

$ perl-MCGI=: standard-e ' print header '

这里介绍了CGI.pm的‘: standard’,可以使用表头功能。可以使用引号和逗号引入多个参数。

代码:

$perl-MCGI='header,start_html'-e'printheader,start_html '

这里我们介绍一下header和start_html函数。

ImplicitLoops

-n和-p增加了循环的功能,这样就可以逐行处理文件了。

代码:

$perl-n-e'somecode '文件1

这与以下程序相同。

代码:

管线:

while(){ 0

#你的代码在这里

}

;在Perl命令行中打开文件,并逐行读取。默认情况下,每行都保存在$ _中。

代码:

$perl-n-e'print'$。-$_ ' '文件

上面一行可以写成

代码:

管线:

while(){ 0

打印' $。-$_quot

;
}

输出当前行数$.和当前行$_.

-p可以让上面的程序变得更容易.-p会输出$_就像这样
CODE:
LINE:

while(<>){  #yourcodegoeshere  }continue{  printordie"-pdestination:$!\n";  }

continue在这里保证print在每次循环都会被调用.

使用-p,我们的打印行数程序可以改为
CODE:
$perl-p-e'$_="$.-$_"'

注意到那个LINE:标签?我们可以利用它来跳到下一个循环.使用nextLINE
CODE:
$perl-n-e'nextLINEunless/pattern/;print$_'

如果想在循环的前后做些处理,可以使用BEGIN或ENDblock.下面的这一行计算文件里的字数.

CODE:
$perl-ne'END{print$t}@w=/(\w+)/g;$t+=@w'file.txt

每一行所有匹配的字放入数组@w,然后把@w的元素数目递加到$t.ENDblock里的print***输出文件总字数.

还有两个参数可以让这个程序变得更简单.-a打开自动分离(split)模式.空格是缺省的分离号.输入根据分离号被分离然后放入缺省数组@F.由此,我们可以把上面的程序改写为
CODE:
$perl-ane'END{print$x}$x+=@F'file.txt

你也可以通过-F把缺省的分离号改为你想要的.例如把分离号定为非字符:
CODE:
$perl-F'\W'-ane'END{print$x}$x+=@F'file.txt

下面通过Unixpassword文件来介绍一个复杂的例子.Unixpassword是文本文件,每一行是一个用户记录,由冒号:分离.第7行是用户的登录shell路径.我们可以得出每一个不同shell路径被多少个用户使用:
CODE:
$perl-F':'-ane'$s{$F[6]}++;'\
>;-e'END{print"$_:$s{$_}"forkeys%s}'/etc/passwd

虽然现在不是一行,但是你可以看出使用参数可以解决什么问题.

RecordSeparators

以前我提到过$/和$\--输入,输出分隔号.$/用来分隔从文件句柄里读出的数据,缺省$/分隔号是\n,这样每次从文件句柄里就会一行行的读取.$\缺省是空字符,用来自动加到要print的数据尾端.这就是为什么很多时候print都要在末尾加上\n.

$/和$\可与-n-p一起使用.在Perl命令行上相对应为-0(零)和-l(这是L).-0后面可以跟一个16进制或8进制数值,若是16进制数,需要使用前缀x.这个值用来付给$/.-0表示以null字符串作为分格符,-00打开段落模式,-0777打开slurp模式(即可以一次把整个文件读入),这与把$/设为空字符和undef一样效果.

单独使用-l有两个效果,***自动chomp输入分隔号,第二把$/值付给$\(这样print的时候就会自动在末尾加\n)

我个人常常使用-l参数,用来给每一个输出加\n.例如

CODE:
$perl-le'print"HelloWorld"'

In-PlaceEditing

使用已有的参数我们可以写出很有效的Perl命令行程序.常见的UnixI/O重定向:

CODE:
$perl-pe'somecode'<input.txt>output.txt

这个程序从input.txt读取数据,然后做一些处理再输出到output.txt.你当然也可以把输出重定向到同一个文件里.

上面的程序可以通过-i参数做的更简单些.
-i把源文件更名然后从这个更名的源文件里读取.***把处理后的数据写入源文件.如果-i后跟有其他字符串,这个字符串与源文件名合成后来生成一个新的文件名.此文件会被用来储存原始文件以免被-i参数覆盖.
注意:使用-i参数后,文件将作为程序的标准输出,所以必须使用-p参数,或者程序里要包含print等输出语法,不然文件将为空.

这个例子把所有php字符替换为perl:

CODE:
$perl-i-pe's/\bPHP\b/Perl/g'file.txt

程序读取文件的每一行,然后替换字符,处理后的数据重新写入(即覆盖)源文件.如果不想覆盖源文件,可以使用

CODE:
$perl-i.bak-pe's/\bPHP\b/Perl/g'file.txt

这里处理过的数据写入file.txt,file.txt.bak是源文件的备份.

上述内容就是常用Perl命令行参数应用的分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/84209.html

(0)

相关推荐

  • 第一次国内革命战争时期,第一次革命和第二次革命时间

    技术第一次国内革命战争时期,第一次革命和第二次革命时间第一次工业革命的时间:18世纪60年代~19世纪40年代第一次国内革命战争时期。第二次工业革命的时间:19世纪60年代后期。
    第一次工业革命极大地提高了生产力,巩固了

    生活 2021年10月25日
  • Ch14学习笔记——MySQL数据库系统

    技术Ch14学习笔记——MySQL数据库系统 Ch14学习笔记——MySQL数据库系统Ch14学习笔记——MySQL数据库系统
    14.1 MySQL简介
    MySQL (MySQL2018 )是一个关系数

    礼包 2021年12月13日
  • mysqlhotcopy备份报错该怎么解决

    技术mysqlhotcopy备份报错该怎么解决mysqlhotcopy备份报错该怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。问题:

    攻略 2021年12月4日
  • Redis中缓存过期、内存被缓存占用要如何处理

    技术Redis中缓存过期、内存被缓存占用要如何处理这篇文章主要讲解了“Redis中缓存过期、内存被缓存占用要如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redi

    攻略 2021年11月29日
  • 怎样解除adobeflash阻止(adobeflashplayer检测出高危漏洞)

    技术如何进行Adobe Flash任意命令执行漏洞分析如何进行Adobe Flash任意命令执行漏洞分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能

    攻略 2021年12月21日
  • java的基础知识总结(java基础都涉及到哪些知识)

    技术Java中的基础知识点有哪些这篇文章主要讲解了“Java中的基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的基础知识点有哪些”吧!"Hell

    攻略 2021年12月21日