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)当一个串是另一个的前缀时,长度长的为大。

perl常用命令

perl常用命令
可以用子数组形式来交换元素:
@array[1,2] = @array[2,1];
11.有关数组的库函数
(1)sort--按字符顺序排序
@array = ("this", "is", "a","test");
@array2 = sort(@array); # @array2 = ("a","is", "test", "this")
例:
$newstring = "potato" . "head";
$newstring = "t" x 5;
$a = "be";
$a .= "witched"; # $a is now "bewitched"
5.条件操作符
与C中类似,条件?值1:值2,当条件为真时取值1,为假时取值2,如:
语句@array = <MYFILE>;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素。
open(OUTFILE, ">outfile");
print OUTFILE ("Here is an output line.\n");
注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。
@array = <STDIN>; # ^D为结束输入的符号
二。文件的操作:
12.
open(FILE1, "/u/jqpublic/file1");

Perl语言IC设计实践

Perl语言IC设计实践

05
2.8获取和 设置环境变 量
3.1匹配的基本过程 3.2匹配
3.3分组和捕获 3.4替换
4.2增加data_type 的类型识别
4.1参数值存为标 量
4.3提供默认值
4.4新增子例程
4.5参数值可以 短划线开头
5.1模拟IC电路设计 流程简介
5.2 PVT仿真的过程
5.3定义PVT仿真程 序的功能
Perl语言IC设计实践
读书笔记模板
01 思维导图
03 目录分析 05 读书笔记
目录
02 内容摘要 04 作者介绍 06 精彩摘录
思维导图
本书关键字分析思维导图
内容
模块
代码
参数
流程
例程
功能
语言
案例
工作 第章
主体
设计
命令行
设计
过程
模拟
程序
代码
内容摘要
内容摘要
本书采用集成电路设计工作中的实际案例,介绍了Perl的各类基本知识,包括:变量、子例程、正则表达式, 文件操作等。针对模拟线路设计,数字线路设计和版图设计等设计过程,分别选取了有代表性的应用案例,实现 并讲解和分析了完整的Perl代码。还介绍了集成电路设计工作中可能常用的模块,以及代码风格建议等进阶内容。 本书zui后介绍了图形用户界面(Perl/Tk)的入门和常用功能。
目录分析
1.2初识命令行参 数
1.1准备工作
1.3改进命令行参 数
1.4继续改进命 令行参数
1.5完成命令行 参数
2.2读取文件
2.1识别文件或目 录
2.3写入文件
01
2.4读取目 录
02
2.5创建目 录

perl常用命令

perl常用命令

1.操作符‎描述‎lt ‎小于‎gt 大‎于‎e q 等于‎l‎e小于等‎于‎g e 大于‎等于‎ne 不‎等于‎cmp ‎比较,返回‎1, 0‎, or ‎-1 ‎2.‎‎逻辑或:$‎a || ‎$b 或‎$a or‎$b‎逻辑与:‎$a &&‎$b 或‎$a a‎n d $b‎逻辑‎非:! $‎a或 n‎o t $a‎逻辑‎异或:$a‎xor ‎$b‎3.表达‎式等效表‎达式$‎a = 1‎; non‎e (ba‎s ic a‎s sign‎m ent)‎$a ‎-= 1;‎$a =‎$a -‎1;‎$a *=‎2; $‎a = $‎a * 2‎;$a‎/= 2‎; $a ‎= $a ‎/ 2; ‎$a %‎= 2; ‎$a = ‎$a % ‎2;$‎a **=‎2; $‎a = $‎a ** ‎2;$‎a &= ‎2; $a‎= $a‎& 2;‎$a ‎|= 2;‎$a =‎$a |‎2;‎$a ^=‎2; $‎a = $‎a ^ 2‎;4‎.字符串联‎结和重复操‎作符‎联接: .‎重复‎:x‎联接且赋值‎(类似+=‎): .=‎例:‎$new‎s trin‎g = "‎p otat‎o" . ‎"head‎";‎$news‎t ring‎= "t‎" x 5‎;$‎a = "‎b e";‎ $a ‎.= "w‎i tche‎d"; #‎$a i‎s now‎"bew‎i tche‎d"‎5‎.条件操作‎符与‎C中类似,‎条件?值1‎:值2,当‎条件为真时‎取值1,为‎假时取值2‎,如:‎$res‎u lt =‎$var‎== 0‎? 14‎: 7;‎$r‎e sult‎= 43‎+ ($‎d ivis‎o r ==‎0 ? ‎0 : $‎d ivid‎e nd /‎$div‎i sor)‎;P‎E RL 5‎中,还可以‎在赋值式左‎边使用条件‎操作符来选‎择被赋值的‎变量,如:‎ $c‎o ndva‎r == ‎43 ? ‎$var1‎: $v‎a r2 =‎14;‎ $co‎n dvar‎== 4‎3 ? $‎v ar1 ‎= 14 ‎: $va‎r2 = ‎14;‎6.数组‎--列表的‎存贮‎列表存贮于‎数组变量中‎,与简单变‎量不同,数‎组变量以字‎符"@"打‎头,如:‎ @‎a rray‎= (1‎, 2, ‎3);‎7‎.$var‎= <S‎T DIN>‎;‎@arr‎a y = ‎<STDI‎N>; #‎^D为结‎束输入的符‎号‎8.数‎组的输出:‎(1) ‎@arra‎y = (‎1, 2,‎3);‎ p‎r int ‎(@arr‎a y, "‎\n");‎(2) ‎@arra‎y = (‎1, 2,‎3);‎ p‎r int ‎("@ar‎r ay\n‎");‎结果为:‎‎1 2 3‎‎sc‎a lar(‎)获得数组‎的元素个数‎9.‎列表/数组‎的长度‎当数组变‎量出现在预‎期简单变量‎出现的地方‎,则PER‎L解释器取‎其长度。

PERL各个符号代表的意思

PERL各个符号代表的意思
print $>.”\n”;#当前进程的有效用户标识符。
print $(.”\n”;#当前进程的实际组标识符(gid)。
print $).”\n”;#当前进程的有效组标识符。
print $0.”\n”;#正在执行的 Perl 脚本的文件名称。这个参数与执行时输入有关
print $[."\n";#数组中第一个元素的序号或子串中第一个字符的序号。缺省是 0。
-| 打开一个“来自”管道,那么你可以从这个文件句柄读取数据
#!/usr/bin/perl
print $_.”\n”;#缺省输入。
print @_.”\n”;#函数参数
#局域变量
print $&.”\n”;#当字符串用于模式匹配时,字符串被分成了三部分:匹配以前的部分,匹配上的部分,匹配以后的部分。任何部分都可能是空,这个变量指最近一次匹配上的字符串。
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
@ISA 数组中列出的类(包)表明了当前类的父类(parent class)或基类(base class)。它是Perl赖以实现继承的方式。@ISA数组中含有类(包)的列表,当Perl在当前类(包)中无法找到所需方法时,便会在该数组列出的类中查找。如果还是找不到的话,Perl还会搜索并调用AUTOLOAD函数。如果仍然找不到的话,Perl会在预定义的UNIVERSAL包中进行最后的搜索。UNIVERSAL类时所有包的全局基类,也是类继承机制中位于最顶层的类。
print @+.”\n”;#这个数组保存当前匹配的最后成功子匹配的结尾的偏移量。$+[0]是整个匹配的偏移量。$+[1]是$1 结束的偏移量,$+[2]是$2 结束的偏移量。

Perl 学习笔记(免费)

Perl 学习笔记(免费)

1. 获取用户输入:2. chomp操作符作用:去除字符串后面的换行符3. 注释:# 注释4. 数组的最后一个值的索引:在变量中加一个#所以数组的个数就是$#rock + 15. 列表赋值6. 创建数组:@name引用的时候:$name[]数组的赋值:7. 数组尾部操作:Push和pop数组头部操作:Unshift(插入)和shift(取出)8. splice操作符可以对数组中的任意位置进行插入和删除操作。

它可以接受4个变量第一个变量是数组名,第二个变量是起始索引,第三变量是长度,第四个变量是补充数组。

二个参数:删除后面全部三个参数,设定删除的长度:四个参数:设定插入的东西9. 标量内插到字符串中:数组也可以内插到字符串中,在内插过程中,会添加空格10. foreach使用默认值,不使用变量:11. reverse操作符:用于将次序变反12. sort操作符用于对数组进行排序13. 对数组使用each操作符:Each可以用于提取哈希的键值,这样也同时可以提取数组的序号和数值。

use 5.012;这样写主要是想用 say如果不用each,需要实现的过程如下:14. 上下文:所谓上下文就是返回的值是根据需要进行返回的。

15清空数组:15. 子程序定义:sub name {};调用子程序:&+子程序名如果我们不写return,照样可以返回,主要是这样写除了返回,没有任何意义。

如果没有明显返回值,就是返回1传递参数:在子程序调用的时候,可以直接写参数,系统会自动将自动将参数保存到$_[]数组中,然后在子程序中可以直接调用$_[0],$_[1]来获得参数。

16. 子程序的私有变量My +定义私有变量用my定义的私有变量可以用在很多地方,比如在for循环中的i我们就可以定义为局部私有变量。

17. use strict可以使的Perl更加严格这不报错,但这就报错,报出的错误是:也就是说不能轻易的用全局变量,应该像上面那样用my修饰,或者是因为你写错了,应该用上面那个已经定义过的变量。

perl入门程序

perl入门程序

perl入门程序Perl 是一种容易学习和使用的语言。

1.第一个程序示例:print "Hollo, World!\n"; # perl的输出类C 同类还有printf--格式输出,sprintf--格式预输出phrase = "Howdy, world!\n";print $phrase;请注意,在 Perl 中我们不必事先定义 $phrase 是什么类型的变量,$ 符号告诉Perl, phrase是一个标量,也就是包含单个数值的变量。

与此对应的数组变量使用 @ 开头。

(可以将 $ 理解成代表 "s" 或 "scalar"(标量),而 @ 表示 "a" 或 "array" (数组)来帮助你记忆。

)2.perl的数据种类:Perl 还有象“散列”(又名“哈希结构”或“hash”,或称“关联数组”),“句柄”(或称“资源符”),“类型团”(或称“指针”)等其他一些变量类型,与标量和数组一样,这些变量类型也是前导趣味字符,下面是你将会碰到的所有趣味字符:3.关于数组的解释:将食物中的水果列出,列表如下:$food{"fruit"} = ("apple", "peach", 'banana", "pear"); # 错很不幸,代码并不能象你希望的那样运转,因为在 Perl 中括弧和逗号还不够强大,还不能将一个列表转换成为标量(在语法中,圆括弧用于分组,逗号用于分隔)。

你需要明确地告诉 Perl 你想将一个列表当成一个标量。

[] 中括弧能够实现这个转换:$food{"fruit"} = ["apple", "peach", 'banana", "pear"]; # 正确4.简单数据结构:Perl 也有一些主题化的方法,最主要的就是使用 package 声明。

Perl语言入门教程

Perl语言入门教程

Perl语言入门教程Perl语言入门教程引言Perl是一种非常简单、应用广泛且反响很好的脚本语言。

它可用于各种任务(例如,您可以使用它创建DOS批处理文件或C外壳脚本的等效文件),但在网络开发环境中,它用于开发CGI脚本。

由于Perl是一种脚本语言,所以使用它的一个好处就是可以分发程序的源代码。

这就为您提供了学习Perl的机会,您也可以下载和修改数千个Perl脚本,以供自己使用。

Perl的缺点之一就是,多数的免费代码都难以理解。

这使Perl自身成了一种神秘的语言类型!本文假定您已经知道如何编程(如果您了解C编程语言,这对您将非常简单)。

一旦掌握了有关Perl的基础知识,使用起来就会非常简单。

在本文中,我们将首先介绍如何使用Perl 执行最常见的编程任务。

阅读本文后,您将可以相对轻松地编写自己的Perl脚本,还可以轻松地读取其他人编写的含义模糊的脚本,这将是一个好的开始。

Perl语言入门指南要启用Perl,您需要有Perl解释程序。

在任何装有UNIX的计算机上,99.99%的都已安装了Perl解释程序。

在装有Windows或Mac计算机上,您需要下载最新的语言版本并将其安装到计算机上。

您可从网上轻松下载Perl,并且是免费的。

接下来,请确保查看Perl附带的DOCS目录,其中会有类似用户手册的资料。

从某种意义上说,读完所有文档,或只是先浏览一下都会很有帮助。

最初会觉得很麻烦,但在读完本文后,您将获得更多的认识。

输出字符“Hello World”如果您已加载了Perl,请确保已正确设置了路径以包含Perl 的可执行文件。

然后,打开文本编辑器并创建一个文本文件。

在文件中,输入以下行:print "Hello World!n";将文件命名为“test1.pl”。

在命令提示符下键入:perl test1.plPerl将运行并执行文本文件中的代码。

您应该会看到词语“Hello World!”打印到标准输出中。

perl的一些基本用法

perl的一些基本用法
my ($num) = @_; #列表context,同($sum) = @_;此为特殊列表,表内只有一个变量
my $num = @_; #标量context ,同$num = @_;
例如 @_=qw(a b c d e f g)
还有补充就是 ($num)里得到的是值为a
$num里得到的是@_的个数为7记住,如果没有使用括号,my 仅定义一个变量◆
小于或等于 <= </td> le 如果 $a 不大于 $b 返回真
比较 <=> cmp 相等时为 0,如果 $a 大为 1 如果 $b 大为 -1
例子 名字 结果
-e $a 存在 如果在 $a 中命名的文件存在则为真
-r $a 可读 如果在 $a 中命名的文件可读则为真
-w $a 可写 如果在 $a 中命名的文件可写则为真
% perlfaq roundperltoc 命令(自己也是一个手册页)搜索所有手册页收集的目录
% perltoc typeglob perl5005delta: Undefined value assigned to typeglob perldata: Typeglobs and Filehandles perldiag: Undefined value assigned to typeglob 或者搜索全部 Perl 在线文档,包括所有头,描述,和例子,对于任何字串的实例,使用 perlhelp 命令: % perlhelp CORE::GLOBAL参阅 perldoc 手册页获取细节。
perlvms DEC VMS 移植
perlwin32 MS-Windows 移植 比较 数字 字串 返回值
等于 == eq = ne 如果 $a 不等于 $b 返回真

Perl语言入门_1

Perl语言入门_1
The length of an array $len_of_array=@my_array; $len_of_array=scalar @my_array; $len_of_array=$#array+1; Change array length $#array=10; # some array elements may not defined
当双引号括起来的字符串中间含有$符 号时,会进行变量替换 $name=”Alice“; $hello=“hello $name”; $test=“\n, \t, \007, \x63”; #变量$hello的内容为”hello Alice” 如果为单引号,则不进行替换

字符串函数



列表的操作

push和pop是在队尾进行的 shift和unshift是在队头进行的
0
1
2
3
4
5
列表的@b; @c=(1..4,@a); 数组@a的长度可以用$#a+1得到 注意数组的长度是在运行时决定的
Array related


不需要编译 运行平台:Windows, UNIX and LINUX
Perl的优点和缺点

优点:

跨平台 擅长文本处理操作 实用高效

缺点:

不擅长数学计算 不擅长实时任务 代码难读
Perl的安装
Windows平台下的Perl安装程序 在ftp搜索引擎里搜索,

ActivePerl *perl*.msi

Removing newlines
chomp($string); chomp(@list); # one element # every element

Lammps语法规则及常用任务

Lammps语法规则及常用任务
bond_style harmonic angle_style charmm dihedral_style charmm pair_style lj/charmm/coul/charmm pair_style lj/charmm/coul/charmm/implicit pair_style lj/charmm/coul/long special_bonds charmm special_bonds amber
如果使用 read data 命令读取原子坐标文件,则将“zlo zhi”值设置为有限但 窄,类似于刚刚描述的 create_box 命令设置。对于文件中的每个原子,分配一个 z 坐标,使其位于 z 轴边界内。例如:0.0。 使用 fix enforce2d 命令作为最后定义的修改,以确保 z 分量的速度和应力在 每个时间步长都被清零。 做这个最后修该的原因是, 其他修补程序可能生成应力, 这样能清除所引起的任何应力。 注意:在 LAMMPS 的一些模型中,将粒子视为有限大小的球体,而不是点 粒子。 在 2d 中,粒子仍然是球体,而不是圆盘,这意味着它们的惯性矩将与 3d 相同。
2. 2d 模拟 使用 dimension 命令定义 2d 模拟。 默认情况下,通过 boundary 命令设置 z 轴为周期边界。 如果使用 create box 命令来定义模拟边界,则将 z 轴设置为窄,但是有限, 以便使用 create_atoms 命令将单个 z 平面的原子来平铺 3d 模拟边界。例如: create box 1 -10 10 -10 10 -0.25 0.25
注意:如果参数本身是一个需要引用参数的命令(例如,使用 print 命令作 为 if 或 run 命令的一部分) ,则单引号,双引号或三引号可以以通常的方式 嵌套。
  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就是叠加后的数字.下面的是上面行命令的文本形式:。

相关文档
最新文档