如何分析Perl命令行程序的用法,针对这个问题,本文详细介绍了相应的分析和解答,希望能帮助更多想要解决这个问题的朋友找到更简单更容易的方法。
Perl命令行程序
命令行程序
下面的Perl参数可以使简短的Perl程序在命令行上轻松运行。-e允许编译器在命令行上直接执行Perl代码。例如,我们可以直接在命令行上运行“HelloWorld”程序,而无需将其编写为Perl程序。
$Perl
-e'print'HelloWorld\n '
Multiple -e也可以同时使用,运行顺序取决于它出现的位置。
$Perl
-e ' print ' hello ' $ $ '-e ' print ' world \ n ' '
像所有的Perl程序一样,只需要程序的* * *行不需要用;结束。
虽然您也可以使用-e来引用模块,-M使它更容易。
$Perl
-mlwp :3360简单-e ' print ' http://www . example.com '
-M模块名与使用模块名相同。有些模块有默认的模块导入。如果不想导入它们,可以使用-m-m模块名,如usemodule(),关闭默认导入。例如,在下面的示例中,因为默认情况下导入head函数,所以在使用-m时不会执行它,从而导致没有输出。
$Perl
-mlwp :3360简单-e ' print ' http://www . example.com '
-m和-M有许多方便的语法来帮助你使用它们。您可以在=
$Perl
-MCGI=: standard-e ' print header '
这里介绍了CGI.pm的:standard,可以使用表头功能。可以使用引号和逗号引入多个参数。
$Perl
-MCGI='头,开始_html'-e '打印头,开始_html '
我们在这里介绍了header和start_html函数。
Perl命令行程序之隐式循环
-n和-p增加了循环的功能,这样就可以逐行处理文件了。
$Perl
-n-e'somecode'file1
这与以下程序相同。
管线:
while(){ 0
#你的代码在这里
}
注意:在命令行中打开文件并逐行读取。默认情况下,每行都保存在$ _中。
$Perl
-n-e'print'$。-$_ ' '文件
上面一行可以写成
管线:
while(){ 0
打印' $。-$_'
}
输出当前行号$。和当前行号$_。-p可以使上述程序更容易。-p将输出$ _的内容,如下所示:
管线:
while(){ 0
#你的代码在这里
}继续{
printordie'-pdestination:$!\n'$$
}
继续这里保证打印将在每个循环中调用。
使用-p,我们的打印行数程序可以更改为
$Perl
-p-e'$_='$。-$_''
在这种情况下,我们不需要显式调用print函数,因为-p选项已经调用了它。
请注意,LINE:标记允许我们直接跳转到下一个输入记录,无论您输入多少层循环。使用下一行。
$Perl
-n-e ' nextline除非/pattern/;打印$_ '
当然,你也可以这样写:
$Perl
-n-e ' print除非/pattern/'
在更复杂的情况下,下一行可以使您的代码更容易理解。
如果你想在循环前后做一些事情,你可以使用BEGIN或者ENDblock。下面一行代码可以计算文本文件中的字数。
$Perl
-ne ' END { print $ t } @ w=/(\ w)/g;$t=@w'file.txt
每行中所有匹配的单词都放入数组@w中,然后@w的元素数增加到$ t。ENDblock中print***输出文件中的总单词数。
还有另外两个参数可以使这个程序更容易。-a打开自动分割模式。空格是默认的分隔号。输入按照分隔号进行分隔,然后放入默认数组@ 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'<input.txt>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命令行程序用法问题的解答就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/84212.html