常用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)

相关推荐

  • sql如何实现jpql排序

    技术sql如何实现jpql排序这篇文章给大家分享的是有关sql如何实现jpql排序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 jpql按升序排序,并且null要排最后,可以使用COA

    攻略 2021年11月25日
  • Spring Data Redis应用场景分析

    技术Spring Data Redis应用场景分析 Spring Data Redis应用场景分析在Spring Boot中,默认集成的redis是Spring Data Redis。Spring Da

    礼包 2021年12月5日
  • Navicat如何生成更新数据库结构同步的数据库

    技术Navicat如何生成更新数据库结构同步的数据库小编给大家分享一下Navicat如何生成更新数据库结构同步的数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让

    攻略 2021年11月23日
  • 如何使用纯java config来配置spring mvc方式

    技术如何使用纯java config来配置spring mvc方式这篇文章将为大家详细讲解有关如何使用纯java config来配置spring mvc方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这

    攻略 2021年11月29日
  • CF161D Distance in Tree 题解

    技术CF161D Distance in Tree 题解 CF161D Distance in Tree 题解Description
    洛谷传送门
    Solution
    似乎各种做法都可以过,这里提供一篇 \

    礼包 2021年10月28日
  • JavaScript编程语言概述

    技术JavaScript编程语言概述 JavaScript编程语言概述产生背景JavaScript最初由Netscape的Brendan Eich设计,最初将其脚本语言命名为LiveScript,后来N

    礼包 2021年11月22日