Perl命令行:一行式程序

Perl命令行:一行式程序,第1张

概述语法 perl命令行在运行"一行式程序"非常有用,用法如下: [[email protected] ~]# perl --helpUsage: perl [switches] [--] [programfile] [arguments] -0[octal] specify record separator (\0, if no argument) -a 语法

perl命令行在运行"一行式程序"非常有用,用法如下:

[[email protected] ~]# perl --helpUsage: perl [switches] [--] [programfile] [arguments]  -0[octal]         specify record separator (-e,if no argument)  -a                autosplit mode with -n or -p (splits $_ into @F)  -C[number/List]   enables the Listed Unicode features  -c                check Syntax only (runs BEGIN and CHECK blocks)  -d[:deBUGger]     run program under deBUGger  -D[number/List]   set deBUGging flags (argument is a bit mask or Alphabets)  -e program        one line of program (several -e's allowed,omit programfile)  -E program        like -e,but enables all optional features  -f                don't do $sitelib/sitecustomize.pl at startup  -F/pattern/       split() pattern for -a switch (//'s are optional)  -i[extension]     edit <> files in place (makes backup if extension supplIEd)  -IDirectory       specify @INC/#include directory (several -I's allowed)  -l[octal]         enable line ending processing,specifIEs line terminator  -[mM][-]module    execute "use/no module..." before executing program  -n                assume "while (<>) { ... }" loop around program  -p                assume loop like -n but print line also,like sed  -s                enable rudimentary parsing for switches after programfile  -S                使用PATH环境变量搜索程序文件  -t                enable tainting warnings  -T                enable tainting checks  -u                在解析程序之后dump core  -U                允许不安全的 *** 作(其中之一:root身份删除目录)  -v                输出版本号、补丁版本  -V                输出Perl的主要配置概要和@INC、@ENV的当前值  -V:variable       输出Config.pm中的某个变量  -w                启用大多数warnings信息  -W                启用所有的warning信息  -x[directory]     忽略#!perl行前面的所有文本(如果指定directory,则先切换到该目录)  -X                禁止所有的warnings信息
单行式程序选项 选项e

perl -e 'print "haha!!!\n"'
选项用于指定待运行的表达式

print "haha!!!\n"

它就相当于在运行一个包含了如下代码的perl程序:

-n

-e是使用perl单行程序的开关,使用该选项后,perl将不再从参数中读取文件名。

可以同时指定多个"-e"。

选项n和p

liNE:    while(<>){        ...-e Expression CODE HERE...    }
选项使得perl单行命令以类似于如下代码的方式运行:

<>

由于while中使用的是@ARGV,所以它会从perl -n中读取文件名进行处理。

sed -n就像-p一样,禁止默认的输出。

liNE:    while(<>){        ...-e Expression CODE HERE...    }continue{        print or dIE "-p destination: $!\n";    }
选项使得perl单行命令以类似于如下代码的方式运行:

perl -p

$_用于强制输出,同时还会输出-l,它会覆盖-n选项。

选项l

-l-lOCTNUM
选项开启自动行尾处理功能

$\

该选项有两个效果:

1.和-n和-p一起使用的时候,将自动使用chomp行终止符
2.将print的输出行分隔符变量$\设置为OCTNUM的数值,OCTNUM的ASCII字符将追加在输出的每一行行尾。如果省略了OCTNUM,则将$/设置为输入行分隔符变量-l的值,通常是换行符

需要注意的是,省略OCTNUM的时候,也就是只有$\ = $/的时候,会处理这个选项的那一刻就完成-ln0e Expression的赋值,所以,如果

# 处理-l的时候$\ = $/;# 处理-0的时候$/ = -0;
将进行两段赋值:

-l

上面的选项不能将-l0ne放在-l后面,否则-iSUFFIX的0将被认为是*的选项参数。

选项i

*用于保存处理结果

如果没有给定SUFFIX,则直接覆盖的源文件中保存,如果指定了后缀SUFFIX,则将源文件以后缀名SUFFIX的方式备份起来,然后将处理结果保存到源文件名中。

如果SUFFIX中不包含星号*,则SUFFIX直接追加在文件名的尾部。如果包含了~,则每个-a都被替换为SUFFIX。SUFFIX甚至可以包含目录名以便保存到其它目录下,但要求目录必须已经存在,且不能使用-n表示家目录。

在内部,perl先重命名文件,然后用原文件名打开输出文件,并把该输出文件作为print、printf和write的默认文件句柄的对象。

选项a和F

-p选项打开自动分割模式,只能在-a-n模式下使用

-p使得@F$F[n]的while循环中首先对行进行一次隐含的split分割 *** 作,并将分割后的结果放进数组-a中,使其可以成为一个个的字段,并通过的方式调用各字段,其中n为字段的索引号,从0开始计算。

通过-a选项,可以使perl单行程序可以以类似于awk的方式运行,只不过awk的第一个字段是从$F[0]开始的,而

perl -ane 'print pop(@F),"\n";'
的第一个字段是从
liNE:    while(<>){        @F = split(' ');        print pop(@F),"\n";    }
开始的。

例如:

-Fpattern

等价于:

//

可以使用‘‘指定字段分隔符,也就是作为split的第一个参数。pattern可以被双斜线""、单引号-0或双引号$/包围,如果没有给定符号,则默认使用单引号。

选项0

$/ = "

perl -a -F":" -ne 'print $F[0],"\n";' /etc/passwdperl -a -F":" -lne 'print $F[0];' /etc/passwd
OCTNUM";使得perl读取行时,以作为行输入分隔符,也就是对行输入分隔符变量进行赋值:

如果给定了OCTNUM,即,则将八进制数值OCTNUM对应的ACSII作为行输入分隔符。

BEGIN和END块

BEGIN块和END块用于主循环while之前和之后,就像awk的BEGIN和END一样。

用法示例

输出/etc/passwd的第一个字段:

总结

以上是内存溢出为你收集整理的Perl命令行:一行式程序全部内容,希望文章能够帮你解决Perl命令行:一行式程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1271857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存