这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 我的认为须要记的语法知识linux
"在某些状况下, 你可能须要在一台机器上写程序, 再传送到另外一台机器上运行.这时候, 请使用"文本模式(text mode)" 或者"ASCII模式(ASCIImode)". 记住, 千万不能是"二进制模式(binary mode)"即使是文本文件, 不一样的系统对待换行符的方式也有所不一样, 因此碰到没法理解的换行符,某些老旧的Perl还可能中断运行"c++
"通常来讲, 程序能够以任何文件名保存.Perl程序并不须要用什么特殊的文件名或者扩展名命名,甚至能不用扩展名就最好保护用扩展名 "编程
"linux上应该修改文件属性使之变成可执行的 chmod a+x XXX(文件名)"windows
"有些函数须要写上版本号, 以下:asp.net
#!/usr/bin/perl函数
use 5.018 #这是我目前的版本 版本号后面必须是3位小数google
say "Hello World"; #这时候say函数就能用了"编码
" # <-这个符号是注释符号, perl中没有块注释"spa
"在Unix系统里, 若是文本文件开头的最前面两个字符时#!, 那么最后跟着的就是用来执行这个文件的程序路径, 在windows上没用,在linux上须要说明。在windows上写了,也是能够的.".net
"Perl程序并不须要变量声明的部分"
"直接量是指某个数字在Perl源代码中的写法, 直接量并不是运算结果, 也并非I/O操做的结果,它只是直接键入程序源代码中的数据"
"在Perl内部,则老是按"双精度浮点数"的要求来保存数字并进行运算的,也就是说,Perl内部并不存在整数值---程序中用到的整形常亮会被转换成等效的浮点数值"
"perl容许用户在直接量中插入下划线"_" 如 61285158231521你可能读着很费劲 可是你能够这么写612_8515_8231_521 这两种写法都表示同一种数字 "
"Perl中一样可使用八进制、十六进制来表示整型常量,除了8、十六进制外,还有二进制,八进制的常量使用0(零)开头,十六进制以0x开头,二进制以0b开头,例如:
"
"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在双引号字符串常量中表示换行符。转义字符以下:
"
"在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
结果 没!有!办!法!输!入!中!文! 程序里面的字符串却是显示正常
如今真心不知道怎么办了。。。。
唉