`
free_bird816
  • 浏览: 205991 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

学习perl中的基础 转

阅读更多

先来一个例子吧
  #!/usr/bin/perl
  use warnings;
  @array(促销产品 主营产品) = qw(a b c d);
  foreach (@array) {
  print $_," ";
  }

  例子的作用就是定义一个数组并把其中的元素打印出来,这里需要注意的是foreach循环部分,foreach循环的标准格式应该是:
  foreach $element (@array){
  ......
  }

  其中数组@array将其中的元素依次赋值给$element,但是在上面那个程序中,我并没有这样做,在程序中,我就使用到了perl中内置的一个特殊变量 $_ 。
  在程序第五行中:foreach (@array) 实际上就是等于 foreach $_ (@array),在这里,$_是默认是输入/输出,因此,如果在程序中有类似的没有明确声明的变量位置的时候,就有可能能使用$_代替。

  再看另外一个内置变量
  perl -e "sleep(5);print qq(The PID of process perl.exe is : $$)";
  这是一句命令行上使用的perl程序,作用就是打印出一段话:print qq(The PID of process perl.exe is : $$) ,在这里,存在着特殊变量$$ ;
  $$是当前perl解析器的进程ID(即,PID),大家可以将在段程序写在命令行上,该程序会在perl解析器运行5秒后打印出perl解析器的进程ID,大家可以在程序运行期间通过查看进程列表来确定打印结果是否正确(^_^不会错的)。

  接下来是一个用来返回错误信息(或是错误号)的特殊变量。
  为了省事,不写程序了,还是来个命令行的吧
  perl -e "opendir FH,'c: one' or die qq(can't open:$!);";
  这句话就是要打开C盘下的一个none目录(而实际上我的C盘中并没有此目录,之所以这样写的目的就是为了引起一个程序中的错误信息),如果没有打开的话,会执行后面的die qq(can't open:$!)
  在这里,$!就指明了错误信息的内容,命令行会返回错误信息:
  can't open:No such file or directory at -e line 1.
  $!在open或是opendir中用的比较多(无论是打开文件还是管道或是其他)。

  来个例子,说一个有意思的特殊内置变量
  $text = "C:\test.txt";
  {
  open FH,$text or die "can't open:$!";
  my $line = ;
  close FH;
  print $line;
  }
  print "#===========================# ";
  {
  undef $/;
  open FH,$text or die "can't open:$!";
  my $line = ;
  close FH;
  print $line;
  }
  =================================
  C盘下的test.txt的内容是:
  111111111111111111111111111
  222222222222222222222222222
  333333333333333333333333333
  =================================
  好,程序的运行结果是:
  111111111111111111111111111
  #===========================#
  111111111111111111111111111
  222222222222222222222222222
  333333333333333333333333333

  程序就不多废话了,作用就是读文件,关键部分在“$line = ”,尖括号操作符(即,)作用是读取一行文件内容(相信大多数教程或是书上都是这么写的),但是,这里所说的一行,实际上是有一个标准的,那就是当perl在遇到了换行符后,边认为是一行,而换行符默认情况下是由于$/这个特殊变量定义的,是缺省值。
  也就是说,perl 在每次使用操作符读文件的时候,会先从$/中获得一个叫做“分隔符”的东西,并以该分隔符为标记来读取文件,如果按默认的$/来说,这个分割符就是一个换行符,所以,默认时,操作符才会每次读取一行文本。
  在给出的例子中,有这样一句 :undef $/ ,也就是将$/设置为未定义的值,这样一来呢,$/就不再起作用了,因此,大家可以看到,第二次进行同样的操作的时候, 操作符就不再是只读一行而是将文件内容全部读出来了。

  接下来看一个会受到$/影响的内置变量,还是先说实例:
  $text = "C:\test.txt";
  open FH,$text or die "can't open:$!";
  while () {
  print "line $. is:$_";
  }
  close FH;
  先来看循环中的:print "line $. is:$_"
  程序的作用是读文件,并且,将文件逐行赋值给$_(因为只用了操作符而没有指定内赋值变量,因此,默认就是赋值给了$_);
  但是这里除了$_,还有一个变量“$.”
  我们来看一下结果:
  line 1 is:111111111111111111111111111
  line 2 is:222222222222222222222222222
  line 3 is:333333333333333333333333333
  可见,变量$.的作用是一个类似计数器的东西,但是,为什么刚开始我说$.会受到$/变量的影响呢 ?

  将上面的例子稍做修改,再看一下:
  $text = "C:\test.txt";
  undef $/; # 注意,多加了这一行
  open FH,$text or die "can't open:$!";
  while () {
  print "line $. is:$_";
  }
  close FH;

  第二行多加了一句undef $/; ,上面已经说过它的作用了,来看一下这段程序运行的结果:
  line 1 is:111111111111111111111111111
  222222222222222222222222222
  333333333333333333333333333
  本来应该是三行的文本,不但被一次性打印出来,而且还指明了“line 1”(看来程序认为这个文本只有一行),为什么 ?
  这是因为$.变量并不是一个单纯的行计数器,确切地说,可以说$.是一个对$/计数器,我们再来看一段程序大概就会明白了:
  $text = "C:\a.txt";
  $/ = ";"; # 注意这里,这里我并将$/设置为未定义,而是给其赋值为分号
  open FH,$text or die "can't open:$!";
  while () {
  print "line $. is:$_ ";
  }
  close FH;

  再看一下C盘下的a.txt的内容:
  ddd;bbb;ccc;fff;eee;
  就这么简单了。
  看一下运行结果:
  line 1 is:ddd;
  line 2 is:bbb;
  line 3 is:ccc;
  line 4 is:fff;
  line 5 is:eee;
  看过这段程序应该就明白了吧。

  好,$.已经讲得差不多了,接下来再说一个它的特性,仍然是看程序说话:
  $text = "C:\test.txt";
  open FH,$text or die "can't open:$!";
  while () {
  print "line $. is:$_ ";
  }
  print " ",$.;
  close FH;
  print " ",$.;
  这个程序要注意的是最后三行中的两个print " ",$.;(一个是在关闭文件前,另外一个则是在关闭文件后)。
  看一下执行结果:
  line 1 is:111111111111111111111111111
  line 2 is:222222222222222222222222222
  line 3 is:333333333333333333333333333
  3
  0
  结果的前三行刚才就已经知道了,这不是我们关心的,我们应该关心的是最后两行结果(即两个print " ",$.;的结果);
  $.变量是具有记忆性的(从原理上来将,它是一个包变量),因此,在关闭文件前打印会发现,它的值是还没有变化的(这时的值和最后一次读完文件的值均为3);
  而在关闭文件后,该变量又被重新初始化为0了。
  这个特性大家注意一下就可以了,因为其中的原理涉及到了perl的作用域和包的一些知识,不是很容易说清楚,所以就不说了,如果对包和作用域有了解的读者对这部分即使我不讲他们也应该能理解的。

  再说最后一个吧
  说一个用来简单判断操作系统类型的,看个例子:
  C:>perl -e "print $^O;";
  MSWin32
  注意,这里这个特殊变量$^O 最后一个字符是字母O,且大写。
  如果是在linux下的话,结果就不是MSWin32了,而是Linux ;
  这是一个判断环境的变量,简单实用。

  perl的内置特殊变量还有很多的,例如常用的还有@_、@ARGV、$ARGV、%INC、%ENV等等,有很多,不可能一一列举了,这里给出一个比较有总结性的列表,是chinaunix上perl社区的一个网友总结的,还算比较全:
  $- 当前页可打印的行数,属于Perl格式系统的一部分
  $! 根据上下文内容返回错误号或者错误串
  $” 列表分隔符
  $# 打印数字时默认的数字输出格式
  $$ Perl解释器的进程ID
  $% 当前输出通道的当前页号
  $& 与上个格式匹配的字符串
  $( 当前进程的组ID
  $) 当前进程的有效组ID
  $* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
  $, 当前输出字段分隔符
  $. 上次阅读的文件的当前输入行号
  $/ 当前输入记录分隔符,默认情况是新行
  $: 字符设置,此后的字符串将被分开,以填充连续的字段.
  $; 在仿真多维数组时使用的分隔符.
  $? 返回上一个外部命令的状态
  $@ Perl解释器从eval语句返回的错误消息
  $[ 数组中第一个元素的索引号
  $ 当前输出记录的分隔符
  $] Perl解释器的子版本号
  $^ 当前通道最上面的页面输出格式名字
  $^A 打印前用于保存格式化数据的变量
  $^D 调试标志的值
  $^E 在非UNIX环境中的操作系统扩展错误信息
  $^F 最大的文件捆述符数值
  $^H 由编译器激活的语法检查状态
  $^I 内置控制编辑器的值
  $^L 发送到输出通道的走纸换页符
  $^M 备用内存池的大小
  $^O 操作系统名
  $^P 指定当前调试值的内部变量
  $^R 正则表达式块的上次求值结果
  $^S 当前解释器状态
  $^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
  $^W 警告开关的当前值
  $^X Perl二进制可执行代码的名字
  $_ 默认的输入/输出和格式匹配空间
  $| 控制对当前选择的输出文件句柄的缓冲
  $~ 当前报告格式的名字
  $` 在上个格式匹配信息前的字符串
  $’ 在上个格式匹配信息后的字符串
  $+ 与上个正则表达式搜索格式匹配的最后一个括号
  $ 当前进程的有效用户ID
  $0 包含正在执行的脚本的文件名
  $ARGV 从默认的文件句柄中读取时的当前文件名
  %ENV 环境变量列表
  %INC 通过do或require包含的文件列表
  %SIG 信号列表及其处理方式
  @_ 传给子程序的参数列表
  @ARGV 传给脚本的命令行参数列表
  @INC 在导入模块时需要搜索的目录列表
  $-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置

 

分享到:
评论

相关推荐

    Perl语言学习.pdf

    Perl语言学习 Perl语言是由Larry Wall在20世纪80年代开发的一种开源的高级语言,它结合了低级语言和高级语言的特性,具有速度快、灵活性强和可读性好的特点。Perl语言的产生是为了解决awk语言无法生成报表的问题,...

    perl学习手札中文

    在学习Perl的过程中,读者将接触到以下关键概念: - **变量和数据类型**:Perl支持各种数据类型,包括标量(数字或字符串)、数组、哈希等。 - **控制结构**:如条件语句(if/else)、循环(for、while)和流程控制...

    零起点perl入门基础教程

    在学习Perl的过程中,理解其基本语法和常用函数至关重要。通过阅读“Perl入门.pdf”这本书,你将学习到如何声明变量、使用控制结构、操作数组和哈希、编写正则表达式、进行文件操作以及如何导入和使用模块。逐步深入...

    perl学习ppt全集

    总结来说,"perl学习ppt全集"是一份全面的学习资源,涵盖了从Perl基础到高级特性的各个层面,通过系统的教学帮助学习者掌握这一强大的编程工具。通过深入学习和实践,不仅可以提高个人编程能力,还能在数据分析、...

    Perl_学习手札

    在学习Perl的过程中,理解其错误处理和调试技巧也至关重要。Perl允许使用"eval"函数捕获运行时错误,并提供了丰富的调试工具,如DB::dbmowf和perldebt。书中的章节会详细介绍如何有效地使用这些工具来定位和修复问题...

    perl基础教程pdf版本

    总之,Perl基础教程将带你走进这个富有表现力和强大功能的语言世界。通过深入学习,你不仅能理解Perl的基本语法,还能掌握如何利用Perl解决实际问题,从而在系统管理和自动化任务中发挥重要作用。无论你是想成为系统...

    perl脚本学习指南

    Perl脚本学习指南 Perl是一种强大的脚本编程语言,尤其在Linux环境中被...在学习Perl的过程中,理解并熟练运用这些基础知识,将有助于编写出高效、简洁的脚本。通过实践和不断探索,你会发现Perl的魅力和强大之处。

    perl个人学习笔记

    Perl是一种强大的脚本编程语言,...以上就是Perl学习笔记中涵盖的一些基础概念和操作。继续深入学习,你将能够编写更复杂的Perl脚本,解决各种实际问题。记得实践是学习编程的关键,多做练习,逐步提升你的Perl技能。

    perl学习资料,超好

    在深入学习Perl的过程中,实践是必不可少的。通过解决实际问题、编写小程序,你可以逐渐熟悉并掌握这些知识点。同时,阅读他人的代码,参与开源项目,参加Perl社区的讨论,都可以加速你的学习进程。Perl虽然语法有些...

    perl脚本了解及学习

    #### 一、Perl基础概览 **Perl**是一种功能强大的通用编程语言,因其灵活性和适应性而在多个行业中得到广泛应用。无论是处理文本、网络编程还是系统管理,Perl都能轻松胜任。它特别适用于快速原型开发以及自动化...

    perl 经典基础教程

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务方面表现突出。...通过深入学习,读者不仅能掌握Perl编程基础,还能理解其在实际问题中的应用,为成为熟练的Perl开发者打下坚实基础。

    Perl 基础教程

    "Perl基础教程"是一本专为初学者设计的教材,旨在帮助新接触Perl的程序员快速掌握这门语言的基础知识。 首先,Perl的命名源自"Practical Extraction and Reporting Language"的首字母缩写,它具有灵活的语法和丰富...

    perl基础入门。chm

    标题中的"perl基础入门.chm"指的是一个关于Perl语言的基础教程,通常以CHM(Compiled HTML Help)格式提供,这种格式的文件是微软推出的一种帮助文档格式,由一系列HTML页面组成,方便用户查阅和学习。 描述中提到...

    perl脚本学习范例

    在"perl脚本学习范例"的压缩包中,可能包含各种脚本,涉及上述和更多Perl概念。通过阅读和实践这些范例,你可以加深对Perl的理解,提高编程技能。每个范例可能涵盖特定的主题,如文本处理、文件操作、网络通信或模块...

    最新perl中文教程

    Perl是一种强大的、高级的脚本编程语言,以其灵活性和...同时,记得结合"Perl视频网址.txt"中的链接观看教学视频,这样可以更直观地理解和学习Perl编程。在学习过程中,不断实践和解决实际问题是提升Perl技能的关键。

    perl中文手册.zip

    Perl,全称 Practical Extraction and Reporting Language,是一种功能强大的高级编程语言,特别适合于文本处理、系统管理和...通过深入学习Perl中文手册,你将能够掌握这种语言,从而在各种IT领域中发挥它的强大功能。

    perl 中文网页教程

    1. **Perl基础**:包括变量、数据类型(如标量、数组、哈希)、控制结构(如if-else、for、while循环)以及函数的使用。 2. **字符串操作**:Perl对字符串的处理非常强大,支持模式匹配、替换、截取等操作,其中...

    perl语言教程合集

    在"perl"这个压缩文件中,可能包含的子文件可能有如"Perl基础教程.html"、"Perl进阶指南.pdf"、"Perl CGI编程.ppt"等,这些文件分别对应不同的学习阶段和主题,帮助学习者系统地掌握Perl语言。 学习Perl不仅可以...

    超好perl学习教程

    总的来说,"超好perl学习教程"是一个全面的资源,涵盖了Perl语言的基础到高级主题,包括语法、正则表达式、文件操作、函数使用等。通过这个教程,学习者可以系统地掌握Perl编程,并能够运用到实际项目中去。

Global site tag (gtag.js) - Google Analytics