千家信息网

Perl命令行有什么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍Perl命令行有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Perl命令行应用介绍这篇文章讲解了一些常用的Perl命令行参数,通过它可以让你的程序更简练
千家信息网最后更新 2026年11月03日Perl命令行有什么用

这篇文章主要介绍Perl命令行有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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会质疑任何程序外传来的数据。例如,从Perl命令行读取,外部文件里读取或是CGI程序里传来的数据。这些数据在-T模式里都会被Tainted(污染)。

Tainted数据不可以被用来和外部交互。

例如使用在system调用和用作open的文件名。关于什么数据会被Tainted,请参阅Perlsec文档,那里有一个完整的列表。

要想使用Tainted的数据就必须untaint这个数据。untaint是通过正则表达式来实现的,关于taint本身的内容足够写一篇单独的文章,所以这里我不会太多的讲述taint模式。如果你要编写的程序(例如CGI程序)需要从从用户那里接受不可知的输入,我推荐使有taint模式。

 还有一个值得一提的参数是-d,它将让Perl处于Debugger模式。这个话题内容非常多,我推荐阅读文档‘PerldocPerldebug’或RichardFoley的PerlDebuggerPocketReference一书.

Command-LinePrograms

下面的几个Perl参数可以让短小的Perl程序很容易的在Perl命令行上运行。-e可以让Perl代码在Perl命令行上被编译器直接执行.例如,我们可以直接在Perl命令行上运行"HelloWorld"程序而不用把它写称Perl程序。
$Perl-e'print"HelloWorld
"'
多个-e也可以同时使用,运行顺序根据它出现的位置.
$Perl-e'print"Hello";'-e'print"World
"'
◆象所有的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函数。ImplicitLoops-n和-p增加了循环的功能,使你可以一行一行来处理文件.
$Perl-n-e'somecode'file1
这与下面的程序一样. 

LINE:  while(<>){   #yourcodegoeshere  }

注意:<>打开Perl命令行里的文件,一行行的读取。每一行将缺省保存在$_
$Perl-n-e'print"$.-$_"'file

上面的这一行可以写成LINE:while(<>){print"$.–$_"}输出当前行数$.和当前行$_.

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

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

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

◆使用-p,我们的打印行数程序可以改为$Perl-p-e'$_="$.-$_"'
这种情况下我们就不需要要明确地调用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
虽然现在不是一行,但是你可以看出使用参数可以解决什么问题。数据分隔符我以前的文章里提到过$/和$—输入,输出分隔号。$/用来分隔从文件句柄里读出的数据,缺省$/分隔号是,这样每次从文件句柄里就会一行行的读取。$缺省是空字符,用来自动加到要print的数据尾端。这就是为什么很多时候print都要在末尾加上。

$/和$可与-n-p一起使用。在Perl命令行上相对应为-0(零)和-l(这是L)。-0后面可以跟一个16进制或8进制数值,这个值用来赋给$/。-00打开段落模式,-0777打开slurp模式(即可以一次把整个文件读入),这与把$/设为空字符和undef一样效果。

单独使用-l有两个效果。

***自动chomp输入分隔号,第二把$/值付给$(这样print的时候就会自动在末尾加),个人常常使用-l参数,用来给每一个输出加.例如
$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/PHP/Perl/g'file.txt
程序读取文件的每一行,然后替换字符,处理后的数据重新写入(即覆盖)源文件.如果不想覆盖源文件,可以使用
$Perl-i.bak-pe's/PHP/Perl/g'file.txt
这里处理过的数据写入file.txt,file.txt.bak是源文件的备份.更多信息。Perl有大量的Perl命令行参数,这篇文章只是列举了最有用的一小部分。

以上是"Perl命令行有什么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

程序 参数 命令 文件 一行 数据 模式 输出 源文件 面的 输入 模块 处理 代码 内容 字符 篇文章 函数 用户 错误 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技工作委员会毛军 互联网与科技金融数据 互联网科技开发公司 西安互联网科技 四个字互联网科技公司取名 卫星互联网科技股票 青岛中康互联网医疗科技有限公司 昊天互联网科技有限公司 湖南一路畅行互联网科技 链环科技传统企业怎么转型互联网 保险科技服务互联网营销体系 怎样加入科技互联网 南通创西澳互联网科技有限公司 小米互联网科技园入驻 宇信科技在杭州互联网排第几 从那以后互联网科技有限公司 互联网高科技行业有哪些企业 互联网科技的前景 上海旺乐尼互联网科技有限公司 互联网科技创业有什么好项目 喔噻互联网科技 互联网科技公司怎么样 科技与互联网的利与弊 金融科技与互联网金融相同和不同 互联网科技与大数据专业 互联网新科技动漫ppt素材 智帮互联网科技公司最近动向 互联网科技包装股 上海同邻互联网科技有限公司规模 福建互联网展示科技馆设计
0