Perl命令行参数

合集下载

perl文件读写

perl文件读写

由于cat命令将显示输入文件的内容, 由于 命令将显示输入文件的内容,故 命令将显示输入文件的内容 该语句等价于open(MYPIPE, “>hello”); 用 该语句等价于 管道发送邮件如下: 管道发送邮件如下: open (MESSAGE, "| mail dave"); print MESSAGE ("Hi, Dave! Your Perl program sent this!\n"); close (MESSAGE);
Perl语言程序设计
文件读写
一、打开、关闭文件
1. 语法 为open (filevar, filename),其中filevar 为文件句柄,或者说是程序中用来代表某文 件的代号,filename为文件名,其路径可为 相对路径,亦可为绝对路径。 open(FILE1,"file1"); open(FILE1, "/u/jqpublic/file1"); open(FILE1, “\\u\\jqpublic\\file1");
亦可用逻辑或操作符表示如下: open (MYFILE, "file1") || die ("Could not open file");
当文件操作完毕后,用close(MYFILE); 关闭文件。
二、读文件
读取文件一行数据 语句$line = <MYFILE>;从文件中读取一 行数据存储到简单变量$line中并把文件指针 向后移动一行。<STDIN>为标准输入文件, 通常为键盘输入,不需要打开。
八、命令行参数
一样, 象C一样,PERL也有存储命令行参数的 一样 也有存储命令行参数的 数组@ARGV,可以用来分别处理各个命令 数组 , 行参数; 不同的是, 行参数;与C不同的是,$ARGV[0]是第一个 不同的是 是第一个 参数,而不是程序名本身。 参数,而不是程序名本身。 $var = $ARGV[0]; # 第一个参数 $numargs = @ARGV; # 参数的个数

PERL的经典用法

PERL的经典用法

Perl的经典用法<编者按:本月的专栏文章将介绍一些Perl的经典用法,以便帮助你创建短小精悍,可靠性更高的程序>perl复制文件夹use File::Copy qw(cp);cp"/dira/dfsdf","/dirb/sdfsdf/dddddd";我用system('cp source target'),如果我把程序移植到WINDOWS能否正确运行?use File::Copy;copy($original,$new_copy)or die"Copy failed:$!";学Perl有几本书要常备:1.Programming Perl2.Perl Cookbook3.Perl FAQ打印数据的方法:一:print"@array\n";二:for$row(@array){print"@$row\n";}三:for$row(0..$#array){print"row$row is:@{$geno_sample[$row]}\n";}用Open()函数打开文件打开文件的常用方法是:open(FH,"<$filename")or die"Couldn't open$filename for reading:$!";open()函数通常带有两个参数,第一个为文件句柄,用于指向打开的文件,第二个参数是文件名及模式(文件的打开模式)的混合体,如果文件被成功打开,open()函数返回true,否则为false。

我们用“or”来测试该条件。

上述代码中的模式由小于字符(<)来表示。

如果文件不存在,open()将返回false。

此时,你可以读文件句柄,但不可以写。

大于字符表示写。

如果文件不存在,就会被创建。

如果文件存在,文件被清除,以前的数据将会丢失。

Perl的命令行参数和ARGV

Perl的命令行参数和ARGV

Perl的命令⾏参数和ARGV程序名:$0$0表⽰当前正在运⾏的Perl脚本名。

有3种情况:如果执⾏⽅式为perl x.pl,则$0的值为x.pl⽽⾮perl命令本⾝如果执⾏⽅式为./x.pl,则$0的值为./x.pl如果执⾏的是perl -e或perl -E⼀⾏式perl程序,则$0的值为-e或-E命令⾏参数ARGVperl将perl命令⾏的参数列表放进数组ARGV(@ARGV)中。

既然是数组,就可以访问($ARGV[n])、遍历,甚⾄修改数组元素ARGV数组分三种情况收集:perl x.pl a b c⽅式运⾏时,脚本名x.pl之后的a b c才会被收集到ARGV数组./x.pl a b c⽅式运⾏时,a b c才会被收集到ARGV数组perl -e 'xxxxx' a b c⽅式运⾏时,a b c才会被收集到ARGV数组ARGV数组索引从0开始计算,索引0位从脚本名(perl程序名)之后的参数开始计算默认,这些命令⾏参数是perl程序的数据输⼊源,也就是perl会依次将它们当作⽂件进⾏读取参数是有序的,读取的时候也是有序的需要区分ARGV变量和ARGV数组:$ARGV表⽰命令⾏参数代表的⽂件列表中,当前被处理的⽂件名@ARGV表⽰命令⾏参数数组$ARGV[n]:表⽰命令⾏参数数组的元素ARGV:表⽰<>当前正在处理的⽂件句柄例如,test.plx的内容如下:/usr/bin/perlprint '$ARGV[0] ---> ',$ARGV[0],"\n",'$ARGV[1] ---> ',$ARGV[1],"\n",'$ARGV[2] ---> ',$ARGV[2],"\n",'$ARGV[3] ---> ',$ARGV[3],"\n",'$ARGV[4] ---> ',$ARGV[4],"\n";执⾏这个程序:shell> ./test.plx -w a b c d$ARGV[0] ---> -w$ARGV[1] ---> a$ARGV[2] ---> b$ARGV[3] ---> c$ARGV[4] ---> d因为是数组,所以可以修改数组,⽐如强制指定元素:/usr/bin/perl@ARGV=qw(first second third);print '$ARGV[0] ---> ',$ARGV[0],"\n",'$ARGV[1] ---> ',$ARGV[1],"\n",'$ARGV[2] ---> ',$ARGV[2],"\n";shell> ./test.plx a b c d$ARGV[0] ---> first$ARGV[1] ---> second$ARGV[2] ---> third例如,读取2个⽂件(a.log,b.log)的内容:/usr/bin/perlwhile(<>){print $_;}shell> ./test.plx a.log b.log如果想读取标准输⼊,只需使⽤"-"作为⽂件参数即可。

perl脚本基础总结

perl脚本基础总结

perl脚本基础总结1. 单引号字符串中的\n不会被当做换⾏符处理。

如:'\'\\' --> '\ 。

2. 双引号字符串联 "Hello"."World"."\n" --> HelloWrold 换⾏;字符串重复操作 "fred"×3 --> "fredfredfred";⼤⼩写 "\l","\L" --> ⼩写 ; "\u","\U" --> ⼤写 ; "\E" 结束。

3. 字符串运算== eq 相等!= ne 不等< lt ⼩于> gt ⼤于<= le ⼩于或等于>= ge ⼤于或等于4. ⽤户输⼊ <STDIN>5. chomp函数:去掉⽂本的"\n"换⾏符。

读写⽂件时,要去掉换⾏符。

如:chomp($text<STDIN>);6. 单⾏注释:# ; 多⾏注释以 "=pod"开始,"=cut" 结束。

7. undef:没有值时,表现为0或空字符串。

8. defined函数:为undef时,返回false,其余返回true。

9. x 输出遍数。

如:print "love" x 3 -->lovelovelove.10. 特殊数组索引:"$#rocks" ,最后⼀个元素索引。

11. qw简写,代替 "" 功能。

如:qw(freds bany wilad dino);12. @rocks=qw /break slasle labv/; #给数组赋值。

@copy=@qwarry; #将⼀个数组拷贝到另⼀个数组⾥。

Perl基本语法

Perl基本语法

1 基本输入输出在 BASH 脚本程序中,我们用 read var 来实现从键盘的输入,用 echo $var 来实现输出。

那么在 Perl 中将有一点变化。

Perl 中将标准输入用关键词表示;标准输出用表示,标准错误输出用表示。

故而从标准输入读取数据可以写成:$var=; # 读取一行输入,并存入变量 $var 中。

@var=; # 读取多行输入,并存入数组 @var 中。

在 Perl 语言中,变量 $_ 是许多操作符的缺省变量。

因此如果需要读入许多行并对每行分别处理一般这样写:while($_=){chop($_); # chop 调用用于去掉 $_ 变量中的最后一个字符(换行符)。

# 处理$_(每一行)}或者可以简写为:while(){chop; # 等同于chop($_)# 处理$_(每一行)}如果 <> 括号之间没有任何字符,则表示从命令行所指示的文件中读取数据,看下面这个例子(read.pl):#!/usr/bin/perl;while(<>){print $_;}如果在命令行输入 $ perl read.pl read.pl 。

这个程序将在屏幕上打印出文件 read.pl 的每一行。

在前面的例子中我们已经看见,Perl 语言中向标准输出输出数据可以用 print 语句。

我们在 print 语句中可以输出多个变量,变量之间用 "," 分隔开来。

如下面的例子:print 3,45*2,"hello",2+2;上面的输出语句将给出 "390hello4" 的输出结果。

除了 print 语句以外,Perl 中还提供了一个 printf 语句用于标准输出,不过 printf 更接近于 C 语言的 printf 函数,可以进行格式化的输出,如:printf "%10s% 8d%8.2f\n",$a,$b,$c;printf("%10s% 8d%8.2f\n",$a,$b,$c); # 加上括号的 C 语言写法也是可以的。

Perl及CGI的Perl实现

Perl及CGI的Perl实现

Perl及CGI的Perl实现CGI是Common Gateway Interface(公共网关接口)的缩写。

在物理上,CGI是一段程序,一种基于浏览器的输入,在Web服务器上运行的程序,提供同客户端HTML页面的接口。

CGI的出现弥补了以前WWW只能单向浏览的不足。

通过CGI,可以实现浏览器与用户之间的交互。

可以说,CGI的出现是WWW能受广大使用者日益喜爱的最大原因。

当我们在一个网页上填写了一个表单(FORM)并按“发送”(SUBMIT)按钮时,表单中填写的信息被传送到服务器,服务器寻找在<FORM>标记中“ACTION”所指定的程序,然后运行这一程序,这一程序就是CGI。

CGI程序首先请求网页FORM中的内容,把它赋给变量,然后访问数据库,写入数据表,或是从数据库中读出数据,把这些数据用HTML页面的形式发送到客户端。

CGI可以用任何语言编写,只要能够在你的服务器上运行。

目前Perl语言已成为CGI 编程的首选,因为它适应所有的平台,而且拥有很多对Web来说非常理想的工具。

1 Perl的安装与运行Perl是Practical Extraction and Report Language的缩写,最早由Larry Wall设计,并由他不断更新和维护,用于Unix环境下的编程。

Perl具有高级语言的强大功能和灵活性,又与脚本语言一样,不需要编译器,只要用任何文本编辑器写出程序并让Perl 来运行即可。

1.1 Perl在Windows XP上的安装Perl它有多种版本,我们安装的是Windows上的ActivePerl 5.6.1。

首先下载“activeperl-5.6.1.628-mswin32-x86-multi-thread.msi”至任何临时目录,双击执行程序,打开Perl安装向导(如图1所示)。

图1 Perl安装向导安装向导允许你选择安装目录(我们安装在D:\Perl目录下),并给出4个选项:●Add Perl to the PA TH environment variable●Create Perl file extension association●Create IIS script mapping for Perl●Create IIS script mapping for Perl ISAPI前两个选项把Perl的路径加入环境变量和使Perl程序与Perl解释器相关联。

在Perl中使用Getopt::Long模块来接收用户命令行参数

在Perl中使用Getopt::Long模块来接收用户命令行参数

在Perl中使⽤Getopt::Long模块来接收⽤户命令⾏参数我们在linux常常⽤到⼀个程序需要加⼊参数,现在了解⼀下 perl 中的有关控制参数的模块 Getopt::Long ,⽐直接使⽤ @ARGV 的数组强⼤多了.我想⼤家知道在 Linux 中有的参数有⼆种形式.•长参数 –help•短参数 -h也就是-和–的分别.–表⽰完整参数.-表⽰简化参数.在 Perl 的这个模块中也⽀持这⼆种⽅法.这要介绍的⼆ Getopt 其实有⼆个模块,⼀个叫 Getopt::Long ⼀个叫 Getopt::Std.下⾯就只介绍 Getopt::Long 了.因为这个模块更加强⼤初始化 Perl命令⾏中所接受的参数,简化了命令⾏参数的解析.下⾯看程序的例⼦复制代码代码如下:#!/usr/bin/perluse strict;use Getopt::Long;use Smart::Comments;my @libs = ();my %flags = ();my ( $verbose, $all, $more, $diam, $debug, $test, $step);GetOptions('verbose+' => \$verbose,'more!' => \$more,'debug:i' => \$debug,'lib=s' => \@libs,'flag=s' => \%flags,'test|t' => \$test,'all|everything|universe' => $all,);### $verbose### $more### $debug### $test### @libs;### %flags•‘verbose+' 接有 + 的选项不接收变量,后⾯不需要加内容.直接使⽤就⾏了,会在每次出现时增加⼀次变量,就是讲命⾏时在参数中 -verbose -verbose 出现⼆次时 verbose 的值就会变成 2.•‘more!' 接有 ! 的选项不接收变量(也就是讲后⾯不需要加参数 –more 来使⽤就⾏了),只要命令⾏中出现了这个参数,就会默认是 1 ,是⽤来设置打开和关掉⼀个功能的>.可以在参数前加 no 变成负的例如-nomore.•‘flag=s' 接有 = 的字符串要求接字符串(s)、整数(i),或者浮点(f)等类型的变量.•‘debug:i' 接有 : 的选项会接受缺省为0或者为空字符串的可选变量•‘test|t' 接有 | 的选项表⽰可以给 –test 简写为 -t.•‘lib=s' => @libs 如果相关联的变量是个数组, 如这个地⽅的 @libs, 那么选项可以多次出现, 值可以被推到数组⾥.•‘flag=s' => %flags 如果相关联的变量是个散列, 那么就要求⼀个键=值(key=value)对, 并被插⼊到散列⾥.备注:在匹配参数名的时候,GetOptions 在缺省设置下会忽略⼤⼩写,默认参数被简写为唯⼀的最短字符串(⾸字母)(例如,-m 代表 -more. 相同的⾸字母时,会加上第⼆个字母来区分)根据上⾯的例⼦,⽐如我们写了⼀个程序叫 test.pl .我们只需要在命令⾏中加如下参数:复制代码代码如下:$ ./test.pl --verbose --verbose -v --more \ --lib='/lib' -l '/lib64' --f a=1 --flag b=2 --debug 2 -t fukai有点⼩长,在看看上⾯的,就会明⽩意思了.在这个地⽅,我使⽤了 Smart::Comment 模块,所以在最下⾯的 ### 是会输出这个变量本⾝的内容的.这也是⼀个超级强⼤的模块.我们来看看输⼊这些参数后.会输出什么内容吧.复制代码代码如下:### $verbose: 3### $more: 1### $debug: 2### @libs: [### '/lib',### '/lib64'### ]### %flags: {### a => '1',### b => '2'### }在对⼀下上⾯输⼊的参数,明⽩了吧.Getopt 模块的简单总结※参数类型:整数, 浮点数, 字串复制代码代码如下:GetOptions('tag=s' => \$tag);‘='表⽰此参数⼀定要有参数值, 若改⽤':'代替表⽰参数不⼀定要有参数值‘s'表⽰传递字串参数, 若为'i'表传递整数参数, 若为'f'表传递浮点数.带值参数使⽤的⽅法复制代码代码如下:$ test.pl --tag=string$ test.pl --tag string⽐如需要传⼏个值到 @libfiles 中的操作⽅法.复制代码代码如下:GetOptions ("library=s" => \@libfiles);GetOptions ("library=s@" => \$libfiles);参数传到 @$tag使⽤的⽅法复制代码代码如下:$ test.pl --library lib/stdlib --library lib/extlib有时我们需要传送⼀些键值对到程序中进⾏处理,就需要使⽤到这个功能了.复制代码代码如下:GetOptions ("define=s" => \%defines);GetOptions ("define=s%" => \$defines);使⽤的⽅法复制代码代码如下:$ test.pl --define os=linux --define vendor=redhat我们需要参数加个简写之类的别名时,可以使⽤下⾯的⽅法复制代码代码如下:GetOptions ('length|height=f' => \$length);第⼀个名称为 primary name, 其他的名称为 alias(可有多个alias名称) ,当使⽤hash参数时, 使⽤primary name作为key值。

perl基本语法介绍

perl基本语法介绍

perl基本语法介绍本文介绍从变量类型、操作运算符、控制叙述、子程序、I/O和档案处理、RegularE某preion、SpectialVariable、Help、函数、总结几个部分介绍perl,只是叙述了一些Perl的基本语法一.数据类型(Datatype):Perl的数据类型大致分为四种:Scalar(变量)、ScalarArray(数组)、HahArray(散列)、Reference(指针),看起来虽少但用起来却绰绰有余。

尤其在写Perl程序时可以不必事先宣告变量,这一点对刚学程序语言的人甚为方便,不过为了以后程序除错和维护方便,我建议你还是养成事先声明变量的习惯比较好。

1Scalar(纯量变量):纯量变量是Perl里最基本的一种数据型态,它可以代表一个字符、字符串、整数、甚至浮点数,而Perl把它们都看成是一样的东东!你甚至可以混着用,不可思议吧。

例如:#井字号开头的后面都是批注。

#纯量变数以$开头。

#my是一种宣告变量的方式,它可以使变量区域化。

#宣告变量时若不加my或local则Perl会把它当作全域变量使用。

#习惯上,我们会将字符串用双引号括起来,而数值就不用加引号。

my$某=\my$某=123;my$某=4.56;1-1常用的操作运算符1)、算术运算符+(加)、-(减)、某(乘)、/(除)、某某(幂)、%(余)、-(负)(1)求幂(某某)结果不能超出数的范围。

当指数为小数时,底数不能为负数,例如:25某某1.5=125,(-25)某某1.5=(不成立)(2)取余(%)操作数为整数,否则要截取。

第二个数不能为0(因为除数不能为0)(3)负(-)-$a=$a某(-1)此外,注意当一个字符串参加运算,需要转化为整数时,如果不能转化为整数则值为0。

例如:'2'+1=3,'a'+1=12)、数字比较运算符(大于)、==(等于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<=>(比较)(1)==:比较运算,比较的结果为真或非零,假或零(2)<=>:比较运算例如:$a<=>$b,当$a>$b时,值为1;当$a(3)自动把操作数转化为整数,不能转化为整数则为0(4)浮点数不精确,不要把值相近的数比较,否则得到的结果是出乎意料的3)、字符串比较运算符lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(不等于)、cmp(比较)(1)字符串的比较原则:按照字母表的顺序比较,数字后z与c进行比较)(3)当一个串是另一个的前缀时,长度长的为大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Perl命令行参数执行控制-e 指定字符串以作为脚本(多个字符串迭加)执行-M 导入模块-I 指定目录以搜索标准位置前的模块整洁性-w 打开警告-Mstrict 打开严格编译指示(pragma)数据-0 (这是个零)指定输入记录分隔符-a 将数据分割成名为@F 的数组-F 指定分割时-a 使用的模式(请参阅perldoc -f split)-i 在适当的位置编辑文件(请参阅perldoc perlrun 以获取大量详细信息)-c 进行perl的语法检查,但不执行perl命令-F 把缺省的分离号改为你想要的。

例如把分离号定为非字符-l 使用-l有两个效果,第一自动chomp输入分隔号,第二把$/值付给$\(这样print的时候就会自动在末尾加\n)-n 使用<>将所有@ARGV参数当作文件来逐行运行,会将读入的内容隐式的逐一按行来遍历文件,每一行将缺省保存在$_-p 和-n一样,但是还会打印$_的内容请注意-p 开关和-n 开关的使用当您想显式打印数据时,使用-n开关。

-p开关隐式地将print $_语句插入到-n开关所产生的循环中。

因此,-p开关更适用于对文件进行的完全处理,而-n开关更适用于选择性文件处理,这样的处理只需打印特定数据。

以下是一些常用的简单实例#perl -pi –e‟s/aaa/bbb/‟ filename修改当前file文件中的文件,不生成中间文件,速度很快。

记住-i开关,因为它让你原地编辑文件。

#perl -ne …print if /^aaaaa/‟ filename象grep一样过滤文件中需要的内容。

这个地方使用了-n,所以一次是做一行的操作,直到整个文件读完。

另外在管道时,-n也会一样来遍历管道送过来的内容。

# perl -n -e 'print "$. – $_"' filename这个例子中的,没用-ne,只是命令写成了-n –e,其实一样,这个例子中是给当前文件中的内容都加一个行号打印出来。

注:$.表示当前行号#perl -pe …$_ = “$. $_”… filename这个其实和上面一样,分别只是使用了-p替换了-n,这个有个什么好处啦,别的地方都一样,但-p按行来遍历完文件后,会给$_打印出来。

大家还记得awk分割域(awk ‘{i = NF –1; print $1 + $i}’)啊,是不是很方便,下面我们来看看perl# perl -lane 'print $F[0] + $F[-2]'这个神奇的地方在于-a,使用-a后,因为-n分行读进来,然后-a给数据分割成@F的数组。

#perl -ne …print if /^START$/ .. /^END$/‟打印正则中从$start到$end的地方#perl -ne …print if $. >= 15; exit if $. >= 17;‟有效地打印数字范围中的行#perl -p -i.bak -e …s/\bfoo\b/bar/g‟ *.c原地修改-i开关的神奇之处在于它对@ARGV中的每个文件都用该脚本对该文件输出所产生的文件版本进行替代#perl -ne …print scalar reverse $_‟ test给文件中的内容反向排序,比如文件中有fukai,就会变成iakuf第一部分:SafetyNetOptions安全网参数在使用Perl尝试一些聪明(或stupid)的想法时,错误难免会发生.有经验的Perl程序员常常使用三个参数来提前找到错误所在,1:-C这个参数编译Perl程序但不会真正运行它.由此检查所有语法错误.每次修改perl程序之后我都会立刻使用它来找到任何语法错误.$perl-cprogram.pl2:-W它会提示你任何潜在的问题.Perl5.6.0之后的版本已经用usewarnings;替换了-w.你应该使用usewarnings因为它要比-w更灵活.3:-T它把perl放到了tain模式.在这个模式里,Perl会质疑任何程序外传来的数据.例如,从Perl命令行读取,外部文件里读取或是CGI程序里传来的数据.这些数据在-T模式里都会被Tainted掉.第二部分:Perl命令行Perl参数:可以让短小的Perl程序运行在Perl命令行1:-e可以让Perl程序在Perl命令行上运行.例如,我们可以在Perl命令行上运行"HelloWorld"程序而不用把它写入文件再运行.$perl-e'print"HelloWorld\n"'多个-e也可以同时使用,运行顺序根据它出现的位置.$perl-e'print"Hello";'-e'print"World\n"'象所有的Perl程序一样,只有程序的最后一行不需要以;结尾.2:-M可以象通常一样引用模$perl-MLWP::Simple-e'getstore("/","163.html")'##下载整个网页-M+模块名和use模块名一样第三部分:隐式循环3:-n增加了循环的功能,使你可以一行一行来处理文件$perl-n-e'print;'1.txt#####$perl-ne'print;'1.txt这与下面的程序一样.LINE: while(<>;){ print; } <>;打开Perl命令行里的文件,一行行的读取.每一行缺省保存在$_ $perl-n-e'print"$.-$_"'file上面的这一行可以写成LINE: while(<>;){ print"$.-$_" } 输出当前行数$.和当前行$_.4:-p,和-n一样,但是还会打印$_的内容如果想在循环的前后做些处理,可以使用BEGIN或ENDblock.下面的这一行计算文件里的字数.$perl-ne'END{print$t}@w=/(\w+)/g;$t+=@w'file.txt每一行所有匹配的字放入数组@w,然后把@w的元素数目递加到$t.ENDblock里的print最后输出文件总字数.还有两个参数可以让这个程序变得更简单.5:-a打开自动分离(split)模式.空格是缺省的分离号.输入根据分离号被分离然后放入缺省数组@F 使用-a,上面的命令可以写成这样:$perl-ane'END{print$x}$x+=@F'file.txt##使用了-a6:-F把缺省的分离号改为你想要的.例如把分离号定为非字符,上面的命令可以改为:$perl-F'\W'-ane'END{print$x}$x+=@F'file.txt下面通过Unixpassword文件来介绍一个复杂的例子.Unixpassword是文本文件,每一行是一个用户记录,由冒号:分离.第7行是用户的登录shell路径.我们可以得出每一个不同shell路径被多少个用户使用:$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进制数值,这个值用来付给$/.-00打开段落模式,-0777打开slurp模式(即可以一次把整个文件读入),这与把$/设为空字符和undef一样效果.单独使用-l有两个效果:第一:自动chomp输入分隔号第二:把$/值付给$\(这样print的时候就会自动在末尾加\n)1:-l参数,用来给每一个输出加\n.例如$perl-le'print"HelloWorld"'第五部分:原位编辑使用已有的参数我们可以写出很有效的Perl命令行程序.常见的UnixI/O重定向:$perl-pe'somecode'>output.txt这个程序从input.txt读取数据,然后做一些处理再输出到output.txt.你当然也可以把输出重定向到同一个文件里.上面的程序可以通过-i参数做的更简单些.2:-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-anle'$cnt{$F[0]}+=$F[1];END{print"$_\t$cnt{$_}"forkeys%cnt}'urfile如果熟悉了上面几个Perl命令行参数的用法,上面的这个命令应该很好理解:每次读取urfile的一行,由于使用了-a,打开自动分离(split)模式.空格是缺省的分离号.输入根据分离号被分离然后放入缺省数组@F中,以文件的第一行为例子$F[0]就是aaa@,$F[1]就是2$cnt{$F[0]}+=$F[1]就是一个哈希数组,以$F[0]为key,$F[1]为value,把相同key的数值都叠加起来.然后把文件的每一行都这样处理一次.END{}就是在循环完之后再处理.里面的意思就是打印这个%cnt哈希数组.这个哈希数组的key就是邮箱名称,value就是叠加后的数字.下面的是上面行命令的文本形式:。

相关文档
最新文档