千家信息网

Perl命令行的应用介绍

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要讲解了"Perl命令行的应用介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Perl命令行的应用介绍"吧!Perl命令行应用介绍Perl
千家信息网最后更新 2024年11月30日Perl命令行的应用介绍

这篇文章主要讲解了"Perl命令行的应用介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Perl命令行的应用介绍"吧!

Perl命令行应用介绍

Perl有很多命令行参数。通过它可以让你的程序更简练,并且可以写出很多只有一行命令的perl。在这篇文章里我们来了解一些常用的命令行参数。

Perl命令行之安全网参数

有三个参数我认为可以起到"安全网"的作用,因为它们可以让你避免犯错,特别是当你在使用Perl尝试一些特别聪明(或这愚蠢)的想法时,错误难免会发生。有经验的Perl程序员常常使用这三个参数来提前找到错误所在。
-C是***个。这个参数编译Perl程序但并不真正运行它。由此检查所有语法错误。每次修改perl程序之后我都会立刻使用它来找到任何语法错误。
$perl-cprogram.pl
这保证了程序依然可以编译。很显然,当你输入一小段代码之后立即进行检查,比起一下子输入几百行代码然后开始debug要容易很多。
-W是第二个参数。它会提示你任何潜在的bug。Perl5.6.0之后的版本已经用usewarnings;替换了-w。你应该使用usewarnings因为它要比-w更灵活。
-T是第三个参数。它让perl出于了taint模式中。在这个模式里,Perl会质疑任何程序外传来的数据。例如,从命令行读取,外部文件里读取或是CGI程序里传来的数据。这些数据在-T模式里都会被Tainted(污染)。Tainted数据不可以被用来和外部交互。例如使用在system调用和用作open的文件名。关于什么数据会被Tainted,请参阅perlsec文档,那里有一个完整的列表。
要想使用Tainted的数据就必须untaint这个数据。untaint是通过正则表达式来实现的,关于taint本身的内容足够写一篇单独的文章,所以这里我不会太多的讲述taint模式。如果你要编写的程序(例如CGI程序)需要从从用户那里接受不可知的输入,我推荐使有taint模式。
还有一个值得一提的参数是-d,它将让Perl处于Debugger模式。这个话题内容非常多,我推荐阅读文档‘perldocperldebug’或RichardFoley的PerlDebuggerPocketReference一书.

Perl命令行之Command-LinePrograms

下面的几个Perl参数可以让短小的Perl程序很容易的在命令行上运行。-e可以让Perl代码在命令行上被编译器直接执行.例如,我们可以直接在命令行上运行"HelloWorld"程序而不用把它写称Perl程序。
$perl-e'print"HelloWorld\n"'
多个-e也可以同时使用,运行顺序根据它出现的位置.
$perl-e'print"Hello";'-e'print"World\n"'
象所有的Perl程序一样,只有程序的***一行不需要以;结尾。然你也可以用-e来引用模块,但-M让它变得更容易。
$perl-MLWP::Simple-e'printhead"http://www.example.com"'
-M模块名和use模块名一样。有些模块有默认的模块导入,如果你不想导入它们,你可以使用-m。-m模块名和usemodule()一样,关闭了默认的导入。例如下面这个例子,因为head函数是默认导入,而使用-m时就不会执行,结果是没有输出。
$perl-mLWP::Simple-e'printhead"http://www.example.com"'
-m和-M有很多方便的语法来帮助你使用它们,你可以在=后面列出对use的各种参数。
$perl-MCGI=:standard-e'printheader'
在这里,CGI.pm的:standard被引入,header函数因此可以使用。要引入多个参数可以通过使用引号和逗号。
$perl-MCGI='header,start_html'-e'printheader,start_html'
这里我们引入了header和start_html函数。

Perl命令行之ImplicitLoops

-n和-p增加了循环的功能,使你可以一行一行来处理文件.
$perl-n-e'somecode'file1
这与下面的程序一样.
LINE:

while(){  #yourcodegoeshere  }

注意:打开命令行里的文件,一行行的读取。每一行将缺省保存在$_
$perl-n-e'print"$.-$_"'file
上面的这一行可以写成LINE:while(){print"$.–$_"}输出当前行数$.和当前行$_.
-p可以让上面的程序变得更容易,-p会输出$_的内容,就像这样:
LINE:

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

continue在这里保证print在每次循环都会被调用。使用-p,我们的打印行数程序可以改为
$perl-p-e'$_="$.-$_"'filename
这种情况下我们就不需要要明确地调用print函数了,因为-p选项已经调用了它。注意,LINE:标签可以让我们直接跳到下一个输入记录,而不管你进入了多少层循环。使用nextLINE。
$perl-n-e'nextLINEunless/pattern/;print$_'
当然,也可以这样写:
$perl-n-e'printunless/pattern/'

在更复杂的情况里,nextLINE可以让你的代码更容易理解。如果想在循环的前后做些处理,可以使用BEGIN或ENDblock.下面的这一行代码可以计算text文件里的字数。
$perl-ne'END{print$t}@w=/(\w+)/g;$t+=@w'file.txt
每一行所有匹配的字放入数组@w,然后把@w的元素数目递加到$t。ENDblock里的print***输出文件总字数。
还有两个参数可以让这个程序变得更简单。-a打开自动分离(split)模式。空格是缺省的分离号。输入根据分离号被分离然后放入缺省数组@F。由此,我们可以把上面的程序改写为
$perl-ane'END{print$x}$x+=@F'file.txt

你也可以通过-F把缺省的分离号改为你想要的.例如把分离号定为非字符:
$perl-F'\W'-ane'END{print$x}$x+=@F'file.txt
下面通过Unixpassword文件来介绍一个复杂的例子。Unixpassword是文本文件,每一行是一个用户记录,由冒号:分离。第?行是用户的登录shell路径。我们可以得出每一个不同shell路径被多少个用户使用:
$perl-F':'-ane'$s{$F[6]}++;'>-e'END{print"$_:$s{$_}"forkeys%s}'/etc/passwd
虽然现在不是一行,但是你可以看出使用参数可以解决什么问题。

Perl命令行之数据分隔符

我以前的文章里提到过$/和$\—输入,输出分隔号。$/用来分隔从文件句柄里读出的数据,缺省$/分隔号是\n,这样每次从文件句柄里就会一行行的读取。$\缺省是空字符,用来自动加到要print的数据尾端。这就是为什么很多时候print都要在末尾加上\n。$/和$\可与-n-p一起使用。在命令行上相对应为-0(零)和-l(这是L)。-0后面可以跟一个16进制或8进制数值,这个值用来赋给$/。-00打开段落模式,-0777打开slurp模式(即可以一次把整个文件读入),这与把$/设为空字符和undef一样效果。
单独使用-l有两个效果,***自动chomp输入分隔号,第二把$/值付给$\(这样print的时候就会自动在末尾加\n)我个人常常使用-l参数,用来给每一个输出加\n.例如
$perl-le'print"HelloWorld"'

Perl命令行之原位编辑

使用已有的参数我们可以写出很有效的命令行程序.常见的UnixI/O重定向:
$perl-pe'somecode'output.txt
这个程序从input.txt读取数据,然后做一些处理再输出到output.txt.你当然也可以把输出重定向到同一个文件里.上面的程序可以通过-i参数做的更简单些。-i把源文件更名然后从这个更名的源文件里读取。***把处理后的数据写入源文件。如果-i后跟有其他字符串,这个字符串与源文件名合成后来生成一个新的文件名。此文件会被用来储存原始文件以免被-i参数覆盖。

这个例子把所有php字符替换为perl:
$perl-i-pe's/\bPHP\b/Perl/g'file.txt
程序读取文件的每一行,然后替换字符,处理后的数据重新写入(即覆盖)源文件.如果不想覆盖源文件,可以使用$perl-i.bak-pe's/\bPHP\b/Perl/g'file.txt
这里处理过的数据写入file.txt,file.txt.bak是源文件的备份.

更多Perl命令行信息

Perl有大量的命令行参数,这篇文章只是列举了最有用的一小部分。更详细的信息请参考"perlrun"文档。
打开Perl的taint模式
1、该程序的输入数据来自外部数据源
2、该程序所调用sub-shell或者函数影响到该程序之外其它东西。
你可以用"-T"开关来打开Perl的taint模式。当打开taint模式时,Perl就会进行执行检查以确保你的数据未被taint,如果不安全的使用了被taint的数据,就会发出严重错误。为了使你的数据不被taint,执行正则表达式来匹配数据并提取匹配部分。这样,你就必须描述出你所期望的数据的内容以及格式,并只接受符合这一要求的数据。
例如,假设你期望收到一个单词字符(wordcharacters,即字母数字以及下划线)那么,下面的代码通过一个正则表达式(它只通过全部由单词字符组成字符串)会"蒸馏出"你的数据来:
if($data=~/^(\w+)$/){
$data=$1;
}else{
die"Error:tainteddatafound:$data\n";
}

感谢各位的阅读,以上就是"Perl命令行的应用介绍"的内容了,经过本文的学习后,相信大家对Perl命令行的应用介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

程序 数据 命令 参数 文件 一行 模式 字符 面的 输入 输出 源文件 代码 内容 模块 处理 应用 函数 错误 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信息化软件开发商 广州信息软件开发常见问题 深圳市超生活网络技术有限公司 计算机应用网络技术方向是什么 i到位的软件开发公司 织梦数据库连接失败 网络技术归什么部门管 幼儿园学校网络安全制度 企业网络安全工作总结 服务器安全防护哪正规 上海宝相网络技术有限公司 网络技术专业的职业兴趣 什么是网络技术转让材料 软件开发思维图谱 国内云服务器招商项目平台 上海世博互联网科技 万得数据库官网在哪 数据库中安全健康码变黄 网络安全黑板报艺术字 mc国际版服务器一百多永久吗 医学专病数据库建设 安徽曙光服务器维修技术云主机 为危害网络安全提供帮助司法解释 宝塔面板数据库突然打不开 删除数据库用户下的所有表 web在线代理服务器 做软件要不要买服务器 浙江gps双模时间服务器 数据库技术应用期末考试卷 无锡网络安全准入控制报价
0