这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识

"在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用"文本模式(text mode)" 或者"ASCII模式(ASCIImode)". 记住, 千万不能是"二进制模式(binary mode)"即便是文本文件, 不同的系统对待换行符的方式也有所不同, 所以碰到无法理解的换行符,某些老旧的Perl还可能中断运行"

"一般来说, 程序可以以任何文件名保存.Perl程序并不需要用什么特殊的文件名或者扩展名命名,甚至能不用扩展名就最好保护用扩展名 "

"linux上应该修改文件属性使之变成可执行的 chmod a+x XXX(文件名)"

"有些函数需要写上版本号, 如下:

#!/usr/bin/perl

use 5.018 #这是我目前的版本 版本号后面必须是3位小数

say "Hello World"; #这时候say函数就能用了"

#  <-这个符号是注释符号, perl中没有块注释"

"在Unix系统里, 如果文本文件开头的最前面两个字符时#!, 那么最后跟着的就是用来执行这个文件的程序路径, 在windows上没用,在linux上需要说明。在windows上写了,也是可以的."

"Perl程序并不需要变量声明的部分"

"直接量是指某个数字在Perl源代码中的写法, 直接量并非运算结果, 也并不是I/O操作的结果,它只是直接键入程序源代码中的数据"

"在Perl内部,则总是按"双精度浮点数"的要求来保存数字并进行运算的,也就是说,Perl内部并不存在整数值---程序中用到的整形常亮会被转换成等效的浮点数值"

"perl允许用户在直接量中插入下划线"_" 如 61285158231521你可能读着很费劲  但是你可以这么写612_8515_8231_521 这两种写法都表示同一种数字 "

"Perl中同样可以使用八进制、十六进制来表示整型常量,除了八、十六进制外,还有二进制,八进制的常量使用0(零)开头,十六进制以0x开头,二进制以0b开头,例如:

  1. 0377
  2. 0xFF
  3. 0b11111111

"

"2**3表示2的3次方 = 8, 取模操作符先取整然后再求余,所以10.5%3.2和10%3的计算结果是一样的"

"字符串就是一个字符序列, 最短的字符串不包括任何字符串是个空串, 最长的字符串没有任何限制, 可以填满整个内存"

"和c or c++不同, 空字符NULL在Perl里并没有什么特殊的意义, Perl会另行记住字符串的长度, 而不是用空字符串来表示字符串的结尾"

"Perl完全支持Unicode,但是它不会自动将程序源代码当做Unicode编码的文本文件读入, 所以如果你想要在源代码中使用Unicode书写直接量的话, 得手工加上utf8编译指令   use utf8    (这是个好习惯)"

"单引号内的字符串直接量指的是一对单引号圈引的一串字符, 前后两个单引号并不属于字符串的内容, 它们只是用来让Perl识别字符串的开头与结尾, 除了单引号和反斜线字符外, 单引号内所有字符都代表他们自己, 要表示反斜线字符本身, 需要在这个反斜线字符前再加一个反斜线字符表示转义, 表示单引号本身也要转义, 如下

'hello\n' #这里不表示换行 表示hello后面接着反斜线和字母n

'hello

there'    #这里hello 换行符 there 总共11个字符  (换行了)

'\'\\'      #单引号紧接着反斜线总共2个字符

"

"对于双引号字符串常量同单引号字符串常量唯一不同的是可以使用转义字符,例如前面的\n在双引号字符串常量中表示换行符。转义字符如下:

  1. \n  换行
  2. \r  回车
  3. \t  水平制表符
  4. \f  换页符
  5. \b  退格
  6. \a  响铃
  7. \e  ESC
  8. \007    八进制的ASCII值,这里的007表示系统响铃
  9. \x7f    十六进制的ASCII值,这里的7f表示删除(DEL)键
  10. \cC 控制符,这里表示(Ctrl + C)
  11. \\  反斜线
  12. \"  双引号
  13. \l  将下一个字符转换为小写
  14. \L  将到\E为止的所有字符转换为小写
  15. \u  将下个字符转换为大写
  16. \U  将到\E为止的所有字符转换为大写
  17. \Q  将到\E为止的非单词(non-word)字符加上反斜线
  18. \E  \E、\U和\Q的结束符

"

"在Perl中可以用 . 来连接两个字符串  如 "hello" . ' ' . "World!" # 等同于"Hello World!" "

" 还有个特性就是字符串重复操作符,例如:"fred" x 3 # 得到"fredfredfred"  ""在Perl中,Perl会根据需要在字符串和数字之间进行类型转换,转换的规则取决于操作符,如果操作符的对象是数字,那么Perl就会将它当作数字,如果操作符的对象是字符串时,则将它当作字符串,例如,"12" * "3"的结果为36,"12fred34" * "3"的结果也为36,Perl会忽略其中的非数字部分,特殊情况下不包含数字的字符串会被转换为零("fred"会被当作数字零来使用)。同样,在需要字符串的时候,数字会被转换为字符串来使用,"Z" . 5 * 7等同于"z" . 35得"Z35"。这些转换都是自动完成的,在平时编程注意一下就是了。"

"开启警告功能  use warnings, 也可以在命令行上使用-w选项对要运行的程序开启警告功能 perl -w xxx"

"如果看不懂某个警告信息, 可以利用diagnostics这个编译命令报告更为详尽的问题描述, 在perldiag文档中列有简要警告信息和详细诊断说明, 改文档是理解diagnosticd输出信息的最佳参考   use diagnostics"

"变量, 就是存储一个或者多个值得容器的名称, 而标量变量, 就是单单存储一个值得变量"

"标量变量存储的是单个标量值, 标量变量的名称以美元符号开头, 这个符号也称为魔符, 然后是变量的Perl标识符:由一个字母或者下划线开头, 区分大小写, 不限于ASCII字符为变量 如 $name  $的意思是"取单个东西"或者"取标量"

"Perl里面我们可以用一对花括号将变量名围起来以避免歧义, 如 print "fred ate $n ${what}s.\n" "

"数值与字符串的比较操作符

比较  数字  字符串

相等  ==   eq

不等  !=     ne

小于  <     lt

大于  >    gt

小于等于   <=   le

大于等于 >=   ge

"

"字符串'0'跟数字0是同一个标量值, 所以Perl会将他们一视同仁, 也就是说, 字符串'0'是唯一被当成假的非空字符串"

 获取用户输入

只要把<STDIN>放在程序中希望返回标量值得位置上, Perl就会从标准输入读取一行文本.

由<STDIN>返回的字符串一般在末尾都会带有换行符, 所以通过下面这段代码, 我们可以看到实际发生的情况:

$line = <STDIN>;

if($line eq "\n")

{

print "that was just a blank line!\n";

}else

{print "that line of input was : $line";}

不过实际编写代码时, 很少需要保留末尾换行符, 所以人们常常会用chomp()操作符去掉它

chomp()最常见的用法就是连用: 如:

chomp($text = <STDIN>); #读入文字, 略过最后的换行符

$text = <STDIN>; #做上面语句同样的事

chomp($text);   #却分成两步

chomp()本质是函数, 而作为一个函数, 它就有自己的返回值. chomp()函数的返回值是实际移除的字符串. 这个数字几乎没有用处, 如果字符串后面有两个以上的换行符, chomp()仅仅删除已个; 如果结尾处没有换行符, 它什么也不做, 直接返回零.

undef值

如果还没赋值就用到了某个标量变量, 不会发生什么大不了的事, 也绝对不会让程序终止运行. 在首次赋值前, 变量的初始值就是特殊的undef值, 它在Perl里的意思仅仅是: 这里空无一物, 如果你想把这个"空无一物"当成数字使用, 他就会表现的像零, 若果当成字符串使用, 他就会表现的像空字符串, 但undef既不是数字也不是zfc, 他完全是另一种类型的标量值

当读到文件结尾时, 他就会返回undef来表示这个状况

defined函数

要判断某个字符串是undef而不是空字符串, 可以使用defined函数, 如果是undef, 该函数返回假, 否则返回真:

$madonna  = <STDIN>

if(defined($madonna) )

{

print "the input was $madonna";

}else

{

print "No input available!\n";

}

这里出现了一个问题:

代码如下:

  1. #! /usr/bin/perl
  2.  
  3. chomp($madonne = <STDIN>);
  4. if(defined($madonne) )
  5. {
  6. print "中文$madonne\n";
  7. }else
  8. {
  9. print "NULL";
  10. }

代码很简单但是有个问题,在window环境下cmd是默认是gbk编码,所以悲催的事来了,假如说我输入的是中文字符串那么。。。

如图所示,出现乱码了。。于是 在代码中添加了一行  use utf8;于是 仍然显示乱码

在百度google以后。。。找到了这么一篇资料

http://blog.useasp.net/archive/2012/04/24/how_to_use_UTF8_encoding_in_Windows_CMD.aspx

结果 没!有!办!法!输!入!中!文!  程序里面的字符串倒是显示正常

现在真心不知道怎么办了。。。。

perl学习之路2的更多相关文章

  1. perl学习之路3

    Perl编程之路3 标签: perl 列表与数组   Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...

  2. perl学习之路1

    一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...

  3. 运用Autoconf和Automake生成Makefile的学习之路

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  4. Qt 学习之路 2(3):Hello, world!

     豆子  2012年8月22日  Qt 学习之路 2  107条评论 想要学习 Qt 开发,首先要搭建 Qt 开发环境.好在现在搭建 Qt 开发环境还是比较简单的.我们可以到 Qt 官方网站找到最新版 ...

  5. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  6. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  7. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  8. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  9. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

随机推荐

  1. css-关于文本

    1. 使用 text-overflow:ellipsis; 超出部分会变成省略号 http://www.w3school.com.cn/tiy/t.asp?f=css3_text-overflow 1 ...

  2. Team Foundation Server源代码管理多人开发的使用心得

    问题1:多人使用TFS源代码管理器的时候,往往会造成同个文件内源代码不一致,覆盖别人的代码. 解决方案: 给多个人分配不同的开发任务,保证每个人修改的文件都不会重叠. 但有些情况无法避免多个人同时修改 ...

  3. java反射

    知识点1:获取类字节码的三种形式 1.Class date = Date.class;//根据类名获取字节码 2.Date date= new Date(); date.getClass();//对象 ...

  4. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  5. EF操作多数据库

    1.Account3_Register_DB_Model作为(空)模板库,根据此模板生成的其他数据除了数据库名称不一样,其他表,视图,字段等等都一致 2.Account3_Platform_Maste ...

  6. Visual Studio将std::cout输出到Output窗口

    在debug的时候,输出到Output需要使用OutputDebugString函数,但部分库的log是采用std::cout输出的,需要用控制台(黑窗)程序来查看输出.有没有一种使用GUI和Outp ...

  7. 移动wap隐藏的坑

    非原创,只做转载 ------------------------------------------------------------------------------------------- ...

  8. 【转】linux sort 命令详解

    sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...

  9. pkcs1与pkcs8格式RSA私钥互相转换

    转自:http://blog.csdn.net/duan19056/article/details/52104966 1.PKCS1私钥生成 openssl genrsa -out private.k ...

  10. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备二)

    接下来,我们继续分析UIlib.h文件中余下的文件,当然部分文件可能顺序错开分析,这样便于从简单到复杂的整个过程的里面,而避免一开始就出现各种不理解的地方. 1. UIManager.h:UI管理器, ...