Perl中常见符号意思
- 格式:docx
- 大小:18.53 KB
- 文档页数:2
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 包我们经常落到使用拷贝和粘贴(ICP-I Copy & Paste)的陷阱里,而如果一个循环或者一个子过程就足够了,(注:这是伪懒惰的一种形式)那么这时候我们实际上应该定义一个更高层次的抽象。
但是,有些家伙却走向另外一个极端,定义了一层又一层的高层抽象,而这个时候他们应该用拷贝和粘贴。
(注:这是伪傲慢的一种形式。
)不过,通常来讲,我们大多数人都应该考虑使用更多的抽象。
落在中间的是那些对抽象深度有平衡观念的人,不过他们马上就开始写它们自己的抽象层,而这个时候它们应该重用现有的代码。
(注:你也许已经猜到了——这是为急燥。
不过,如果你准备推倒重来,那么你至少应该发明一种更好的东西。
)如果你准备做任何这样的事情,那么你都应该坐下来想想,怎样做才能从长远来看对你和你的邻居最有好处。
如果你准备把你的创造力引擎作用到一小块代码里,那么为什么不把这个你还要居住的这个世界变得更美好一些呢?(即使你的目的只是为了程序的成功,那你就要确信你的程序能够符合社会生态学的要求。
)朝着生态编程的第一步是:不要在公园里乱丢垃圾(译注:否则砸到小朋友...或者花花草草...:)。
当你写一段代码的时候,考虑一下给这些代码自己的名字空间,这样你的变量和函数就不会把别人的变量和函数搞砸了,反之亦然。
名字空间有点象你的家,你的家里想怎么乱都行,只要你保持你的外部界面对其他公民来说是适度文明的就可以了。
在 Perl 里,一个名字空间叫一个包。
包提供了基本的制作块,在它上面构造更高级的概念,比如模块和类等。
和“家”的说法相似,“包”的说法也有一些模糊。
包独立于文件。
你可以在一个文件里有许多包,或者是一个包跨越多个文件,就好象你的家可以是在一座大楼里面的小小的顶楼(如果你是一个穷困潦倒的艺术家),或者你的家也可以由好多建筑构成(比如你的名字叫伊丽沙白女王)。
但家的常见大小就是一座建筑,而包通常也是一个文件大,Perl 给那些想把一个包放到一个文件里的人们提供了一些特殊的帮助,条件只是你愿意给文件和包相同的名字并且使用一个 .pm 的扩展名,pm 是“perl module” 的缩写。
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; #将⼀个数组拷贝到另⼀个数组⾥。
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 eq用法Perl中的eq操作符是用来比较两个字符串是否相等的操作符。
它是一种字符串比较操作符,与其他的比较操作符(如>、<等)不同,它不会将字符串转换成数字进行比较,而是直接比较字符串本身。
eq操作符的使用方法与其他操作符类似,格式为“字符串1 eq 字符串2”。
如果两个字符串相等,则返回真(1),否则返回假(0)。
下面是eq操作符的一些示例:例一:比较两个字符串是否相等。
$var1 = "Hello world";$var2 = "hello world";if($var1 eq $var2){print "两个字符串相等";}else{print "两个字符串不相等";}输出结果:两个字符串不相等例二:将字符串转换成数组,然后比较。
$var1 = "apple,banana,orange";$var2 = "apple,banana,orange";@arr1 = split(",",$var1);@arr2 = split(",",$var2);# 比较两个数组是否相等if (@arr1 eq @arr2){print "两个数组相等";}else{print "两个数组不相等";}输出结果:两个数组相等除了eq操作符,还有另外两个字符串比较操作符:ne和cmp。
ne 操作符与eq操作符相反,当两个字符串不相等时返回真(1),否则返回假(0)。
cmp操作符则是用来比较两个字符串的大小关系,与其他比较操作符类似,返回值为-1、0或1。
总之,eq操作符是Perl中用来比较两个字符串是否相等的操作符,它非常实用,可以使用在不同的场景中,能够更有效地处理字符串的比较工作。
字符串符号字符串是计算机编程中常用的数据类型之一,用于表示文本或字符序列。
在字符串中,可以使用一些特殊的符号或字符来表示特定的含义或实现特定的操作。
以下是一些常见的字符串符号:1. 引号:字符串通常使用引号括起来,以标识字符串的开始和结束。
常见的引号符号包括单引号(')和双引号(")。
例如:"Hello, World!" 或者'This is a string.'2. 转义字符:转义字符用于在字符串中表示特殊字符或具有特殊含义的字符。
转义字符通常以反斜杠(\)开头,后面跟着一个特定的字符。
常见的转义字符包括:- \n:表示换行符- \t:表示制表符- \r:表示回车符- \\:表示反斜杠字符- \":表示双引号字符- \':表示单引号字符3. 占位符:占位符用于在字符串中动态插入变量或值。
在不同的编程语言中,占位符的表示方式可能略有不同,但常见的占位符符号包括百分号(%)和大括号({})。
例如,"My name is %s." 或者"The result is {}."4. 加号(+):加号可以用于字符串的连接,将两个或多个字符串拼接在一起形成新的字符串。
例如,"Hello" + "World" 结果为"HelloWorld"。
5. 下标符号([]):下标符号可用于访问字符串中的单个字符或子字符串。
在大多数编程语言中,字符串的下标从0开始计数。
例如,str[0] 表示字符串str 的第一个字符。
这些字符串符号在不同的编程语言中可能有细微的差异,具体使用时请参考相应编程语言的文档或规范。
Perl5教程-- 第一章概述一、Perl是什么?Perl是Practical Extraction and Report Language的缩写,它是由Larry Wall设计的,并由他不断更新和维护,用于在UNIX环境下编程。
.Perl具有高级语言(如C)的强大能力和灵活性。
事实上,你将看到,它的许多特性是从C语言中借用来的。
.与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。
这意味着Perl对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。
.Perl提供脚本语言(如sed和awk)的所有功能,还具有它们所不具备的很多功能。
Perl还支持sed到Perl及awd到Perl的翻译器。
简而言之,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。
二、Perl在哪里?Perl通常位于/usr/local/bin/perl或/usr/bin/perl中。
你可以在Internet用匿名FTP免费得到它,如ftp:///pub/gnu/perl-5.004.tar.gz。
安装过程为:(1)解压:$gunzip perl-5.004.tar.gz$tar xvf perl-5.004.tar.gz(2)配置:$Configure(3)编译:$make$make test$make install(3)放置:将编译生成的可执行文件拷贝到可执行文件通常所在目录,如:$copy <compiled excutable file> /usr/local/bin/perl注:这需要系统管理员权限。
北美欧洲澳洲南美三、运行用文本编辑器编辑好你的Perl程序,加上可执行属性:$chmod +x <program>就可以执行了:$./<program>。
如果系统提示:"/usr/local/bin/perl not found",则说明你没有安装成功,请重新安装。
1.操作符描述lt 小于gt 大于e q 等于le小于等于g e 大于等于ne 不等于cmp 比较,返回1, 0, or -1 2.逻辑或:$a || $b 或$a or$b逻辑与:$a &&$b 或$a an d $b逻辑非:! $a或 no t $a逻辑异或:$axor $b3.表达式等效表达式$a = 1; none (bas ic as signm 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联接且赋值(类似+=): .=例:$news tring = "p otato" . "head";$newst ring= "t" x 5;$a = "b e"; $a .= "wi tched"; #$a is now"bewi tched"5.条件操作符与C中类似,条件?值1:值2,当条件为真时取值1,为假时取值2,如:$resu lt =$var== 0? 14: 7;$re sult= 43+ ($d iviso r ==0 ? 0 : $d ivide nd /$divi sor);PE RL 5中,还可以在赋值式左边使用条件操作符来选择被赋值的变量,如: $co ndvar == 43 ? $var1: $va r2 =14; $con dvar== 43 ? $v ar1 = 14 : $var2 = 14;6.数组--列表的存贮列表存贮于数组变量中,与简单变量不同,数组变量以字符"@"打头,如: @a rray= (1, 2, 3);7.$var= <ST DIN>;@arra y = <STDIN>; #^D为结束输入的符号8.数组的输出:(1) @array = (1, 2,3); pr int (@arra y, "\n");(2) @array = (1, 2,3); pr int ("@arr ay\n");结果为:1 2 3sca lar()获得数组的元素个数9.列表/数组的长度当数组变量出现在预期简单变量出现的地方,则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运算符七、自增自减运算符:++、--.不要在变量两边都使用此种操作符:++$var-- # error.不要在变量自增/减后在同一表达式中再次使用:$var2 = $var1 + ++$var1; # error.在PERL中++可用于字符串,但当结尾字符为'z'、'Z'、'9'时进位,如:$stringvar = "abc";$stringvar++; # $stringvar contains "abd" now$stringvar = "aBC";$stringvar++; # $stringvar contains "aBD" now$stringvar = "abz";$stringvar++; # $stringvar now contains "aca"$stringvar = "AGZZZ";$stringvar++; # $stringvar now contains "AHAAA"$stringvar = "ab4";$stringvar++; # $stringvar now contains "ab5"$stringvar = "bc999";$stringvar++; # $stringvar now contains "bd000".不要使用--,PERL将先将字符串转换为数字再进行自减$stringvar = "abc";$stringvar--; # $stringvar = -1 now.如果字符串中含有非字母且非数字的字符,或数字位于字母中,则经过++运算前值转换为数字零,因此结果为1,如:$stringvar = "ab*c";$stringvar++;$stringvar = "ab5c";$stringvar++;八、字符串联结和重复运算符1. 联接: .2. 重复:x3. 联接且赋值(类似+=): .=例:$newstring = "potato" . "head";$newstring = "t" x 5;$a = "be";$a .= "witched"; # $a is now "bewitched"九、逗号运算符其前面的表达式先进行运算,如:$var1 += 1, $var2 = $var1;等价于$var1 += 1;$var2 = $var1;使用此操作符的唯一理由是提高程序的可读性,将关系密切的两个表达式结合在一起,如:$val = 26;$result = (++$val, $val + 5); # $result = 32注意如果此处没有括号则意义不同:$val = 26;$result = ++$val, $val + 5; # $result = 27十、条件运算符与C中类似,条件?值1:值2,当条件为真时取值1,为假时取值2,如:$result = $var == 0 ? 14 : 7;$result = 43 + ($divisor == 0 ? 0 : $dividend / $divisor);PERL 5中,还可以在赋值式左边使用条件操作符来选择被赋值的变量,如:$condvar == 43 ? $var1 : $var2 = 14;$condvar == 43 ? $var1 = 14 : $var2 = 14;十一、指令:.. 区块运算符(Range Operator)说明:这个运算符是Perl 语言中特有的运算符,是一个很实用的运算符.范例:@digits=(1..9); #此时@digits=(1,2,3,4,5,6,7,8,9);@digits=('01'..'05'); #此时@digits=(01,02,03,04,05);@char=('A'..'E'); #此时@char('A','B','C','D','E',);@total=(1..3,'A'..'B'); #此时@total=(1,2,3'A','B');十二、模式匹配运算符"=~" 检验匹配是否成功,$result = $var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。
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 scalar函数Perl是一种功能强大的编程语言,它支持各种函数和数据类型,其中scalar函数是其中之一。
scalar函数是Perl中的一种数据类型,用于表示单个标量值。
它可以存储数字、字符串、布尔值或者引用(一个指向其他数据类型的指针),并且可以通过各种操作进行处理。
在Perl中,scalar函数可以用$符号来表示,例如$var。
这个变量可以存储一个标量值,并且可以使用各种运算符进行处理。
例如,可以使用加号运算符将两个scalar值相加,如$var1 + $var2。
scalar函数还可以用来表示字符串,这时候需要用引号将字符串括起来。
例如,$str = 'hello world' 就是将字符串'hello world'存储到$str变量中。
除了基本的数值和字符串操作,scalar函数还可以进行各种比较操作。
例如,可以使用比较运算符(==、!=、<、>、<=、>=)来比较两个scalar值的大小,或者使用eq运算符来比较两个字符串是否相等。
scalar函数还支持各种转换操作。
例如,可以将一个数值类型的scalar值转换成字符串类型的值,或者将一个字符串类型的值转换成数值类型的值。
转换函数包括int、hex、oct、chr、ord等。
在Perl中,scalar函数还有一个重要的用途,就是作为函数的返回值。
例如,一个函数可以返回一个scalar值,该值可以是数字、字符串或者一个引用。
总之,scalar函数是Perl语言中一个非常重要的数据类型,它可以用来存储各种类型的数据并进行各种操作。
无论是在编写Perl 脚本还是模块时,都需要使用scalar函数进行数据操作。
perl中my和our的区别分析perl中our的⽤法require 5.006当版本号⼩于 5.006 的时候,会返回失败,从⽽导致模块加载失败。
所以它的作⽤就是保证模块调⽤环境的 Perl 版本。
our 和 my ⼀样,都是对变量的声明,不过 our 声明的是包全局变量,⽽ my 声明的是词法变量。
不过,经过 our 声明的变量,它会变得像⼀个词法变量⼀样,其实这也是 our 存在的⽬的:⽤来欺骗 strict pragma,使 strict 以为它是⼀个词法变量,其实却不是。
有⼀个简单的办法可以理解 our:1,你就把 our 声明的变量和 my 声明的当成⼀样。
2,记住 our 和 my 的区别:our 声明的是⼀个包全局变量,因此在符号表中存储(可以通过全限定在任何地⽅访问),⽽ my 声明的是⼀个真正的词法变量,只能在闭合块中访问。
代码例⼦复制代码代码如下:my $var = 1;{my $var = 2;print $var, "\n";}print $var, "\n";输出:21复制代码代码如下:our $var = 1;{our $var = 2;print $var, "\n";}print $var, "\n";输出:22perl中our的⽤法其实,our 的出现有它的历史,Perl 和别的语⾔不同,可以随便声明变量,在 Perl 4 那个时代,根本就不需要 my 什么的,随便写个名字,就是变量了。
在 Perl 5 中仍然如此,除⾮你⽤ my 明确声明为词法变量,否则所有的变量都是(包)全局变量,⽽且可以不声明直接使⽤。
但是,这样有个坏处,那就是万⼀不⼩⼼写错名字了,或者解符号引⽤的时候,字符串运算错了,都会造成很多⿇烦(因为按照 Perl 5 语法,这些都是正确的,其结果就是产⽣⼀个新的变量,很显然,这不是你想要的⽬的。
Perl中常见操作
注释:
1.单行: #print
2.多行:=pod …. =cut
查询perl相关:
Perldoc perlvar($a,$$,$”...)
Perldoc perfunc(sort…)
Perldoc perl 查看perldoc文章列表
Perldoc –q 正则表达式
Perldoc –f 函数名
Perldoc module_name 查看模块
Perldoc –v 变量名查看变量
Perldoc perlop 查看操作符
查看模块相关函数:
1.Perl –d –e 0
e module::submod
3.S module::submod
测试程序运行时间:
1.Unix下:Time perl5 perl_program
2.程序内添加:$end_time = time();$elapsed_time = $^T - $end_time; print $elapsed_time;
3.perl程序内使用benchmark模块: use benchmark; timestamp1 = new benchmark; {Code};timesamp2 = new benchmark; time_run = timediff(timestamp2 - timesamp1); 符号:
<=> Spaceship operator,太空船操作符:三向的比较数字操作符。
$a<=>$b 这个操作符比较两个数字,返回-1,0,1。
返回1:$a>$b,返回0:$a=$b,返回-1:$a<$b。
$a,$b在sort中使用时代表第一个和第二个进来的标量或数组等
$! 根据上下文内容返回错误号或者错误串
$”列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$& 与上个格式匹配的字符串
$( 当前进程的组ID$) 当前进程的有效组ID
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
$, 当前输出字段分隔符
$. 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段.
$; 在仿真多维数组时使用的分隔符.
$? 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中第一个元素的索引号
$\ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D 调试标志的值
$^E 在非UNIX环境中的操作系统扩展错误信息
$^F 最大的文件捆述符数值
$^H 由编译器激活的语法检查状态
$^I 内置控制编辑器的值
$^L 发送到输出通道的走纸换页符
$^M 备用内存池的大小
$^O 操作系统名
$^P 指定当前调试值的内部变量
$^R 正则表达式块的上次求值结果
$^S 当前解释器状态
$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^V perl版本
$^W 警告开关的当前值
$^X Perl二进制可执行代码的名字(perl指令)
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$< 当前执行解释器的用户的真实ID
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置
while(){
my($date,$desc,$income,$expend) = unpack(“A10xA27xA7xA*”);
}
简单说明:
A10: A表示ASCII,A10表示10个ASCII character, Date的表示就是用10个ASCII码; x : x表示null byte也等于skip a byte,也就是说我们要跳过一个char(|),
A27: 然后接着27个ASCII char,
x : 然后跳过一个vhar,
A7 : 再接上7个ASCII,
x : 在跳过一个char,
A* : 最后A*表示不管后面char有多少个,全含括进来。