perl学习之路2
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识
"在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用"文本模式(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开头,例如:
- 0377
- 0xFF
- 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在双引号字符串常量中表示换行符。转义字符如下:
- \n 换行
- \r 回车
- \t 水平制表符
- \f 换页符
- \b 退格
- \a 响铃
- \e ESC
- \007 八进制的ASCII值,这里的007表示系统响铃
- \x7f 十六进制的ASCII值,这里的7f表示删除(DEL)键
- \cC 控制符,这里表示(Ctrl + C)
- \\ 反斜线
- \" 双引号
- \l 将下一个字符转换为小写
- \L 将到\E为止的所有字符转换为小写
- \u 将下个字符转换为大写
- \U 将到\E为止的所有字符转换为大写
- \Q 将到\E为止的非单词(non-word)字符加上反斜线
- \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";
}
这里出现了一个问题:
代码如下:
#! /usr/bin/perl chomp($madonne = <STDIN>);
if(defined($madonne) )
{
print "中文$madonne\n";
}else
{
print "NULL";
}
代码很简单但是有个问题,在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的更多相关文章
- perl学习之路3
Perl编程之路3 标签: perl 列表与数组 Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...
- perl学习之路1
一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...
- 运用Autoconf和Automake生成Makefile的学习之路
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- Qt 学习之路 2(3):Hello, world!
豆子 2012年8月22日 Qt 学习之路 2 107条评论 想要学习 Qt 开发,首先要搭建 Qt 开发环境.好在现在搭建 Qt 开发环境还是比较简单的.我们可以到 Qt 官方网站找到最新版 ...
- jQuery学习之路(1)-选择器
▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- RPC远程过程调用学习之路(一):用最原始代码还原PRC框架
RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...
- webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
- [精品书单] C#/.NET 学习之路——从入门到放弃
C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...
随机推荐
- NodeJS+Express下构建后端MVC文件结构
关于MVC的结构大体上有两种方式,其一按照层级进行文件夹分类,其二是按照业务进行文件夹分类.关于这个demo相关的业务简单,所以暂采用第一种的方式,当然实际当中很恨复杂的项目可以采用两种方式相结合的方 ...
- 第一次使用UML的感觉
刚开始接触的时候,其实我内心是拒绝的,因为感觉这种软件之前接触过,觉得就是相当于思维导图那种的. 可当自己使用的时候,觉得大纲总体上是类似是规划方向的,可是细节却让人深思,用什么图标,特别是用什么线, ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】
一.Action中User注入问题 Action中可能会经常用到已经登陆的User对象,如果每次都从Session中拿会显得非常繁琐.可以想一种方法,当Action想要获取User对象的时候直接使用, ...
- 让IIS支持bootstrap 增加svg和woff格式文件的支持
增加以下两种文件类型即可: .woff application/x-woff.svg image/svg+xml
- 【leetcode】Pascal's Triangle
题目简述: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5 ...
- Log4Net记录日志的使用
Log4net 基本样式: <log4net> <appender name="LogFileAppender" type="log4net.Appen ...
- 3.View绘制分析笔记之onLayout
上一篇文章我们了解了View的onMeasure,那么今天我们继续来学习Android View绘制三部曲的第二步,onLayout,布局. ViewRootImpl#performLayout pr ...
- Java EE之servlet处理表单提交的请求
1.在源包下新建一个Servlet页,取名为LoginServlet: package weinidingServlet; //该Servlet所 ...
- iOS drewRect方法
You do not need to override this method if your view sets its content in other ways. By the time thi ...