Learning Perl 6th
Chapter 1 and Chapter 2
1、Perl的优点:开发相对快速(比较于C),功能强大,执行效率较高(相对于Python),可移植性。
2、Perl脚本中,直接用`cmd`执行其他Shell命令,类似于SH脚本。
#!/usr/bin/perl $result=`ls -alh`; print $result;
3、上述$是scalar变量(标量,单一变量),而@表示Array变量(数组)。
4、Perl支持Integer、Float等数值变量,但实际内部计算都是以Float计算的。
5、对于有效数字特别长的情况,Perl允许通过下划线“_”分割数值,_本身无意义,只是方便读取:
1_2_3 == 123 1.2_3_4 == 1.234
6、和其他语言类似,在数值常量中,Perl也支持16进制、8进制,此外还支持2进制。
0377 # 8进制 0xff #16进制 0b11111111 #2进制
7、Perl支持+、-、*、/、%等数值操作。
8、字符串用“双引号”或者‘单引号’包围。前者会对之中$开头的变量自动解析,后者不会自动解析。
9、字符串的连接操作符为点号.。
10、字符串重复操作符,用字母x表示。
print "abc" x 3; # abcabcabc
11、根据语境,Perl会自动将数字、字符串互相转换。
"12" * "3" # 36 "Z".3*5 # Z15
12、Perl开启警报的两种方法。
在Perl脚本中引用
use warnings;
或者执行时加-w选项:
perl -w xx.pl
13、Warning是比较简单的提醒,如果想要描述更全面的,可以使用diagnostics。
use diagnostics;
或者Perl执行时加选项:
perl -Mdiagnostics xx.pl
14、A scalar variable holds exactly one value.可以hold数值、字符串等类型。
15、与scalar variable对应的,是三种能“盛放”多个值的类型:Arrays、Hashes。
16、scalar变量以$开头,标识符的规则比其他语言更为宽松,允许数字开头、也可以用utf-8字符。
17、scalar支持=、+=、*=、.=等类型。
18、print用法与Python类似,但它的逗号输出不会自动加\t,最后也不会加\n。
print "a", "b"; # ab
19、如果scalar变量从未被赋值过,则其默认为一个空字符串。
20、在“引号”中,scalar变量将会被自动翻译位对应的值,加\可以阻止这种行为。
$b="xxx"; print "$b\n"; # xxx print "$b\n"; # $b
21、在引号翻译中,有时候变量名字和其他字符连接,导致出现意外情况,可以用${变量名}的方式,限定变量名的范围。
$what="xxx"; print "$whats\n"; # empty string, because no $whats exists print "${what}s\n"; # xxxs
22、ASCII码转字符:chr;字符转ASCII码:ord。
#!/usr/bin/perl print ord("a")."\n"; # 97 binmode(STDOUT, ':encoding(UTF8)'); print chr(20013)."\n"; # 中
23、如上所述,就是打印UTF8到屏幕的方法。
24、数值比较:<、<=、==、>=、>、!=。然而,Perl中的字符串比较采用了另外的操作符:lt、le、eq、ge、gt、ne。字符串比较是逐字符、字典序。
25、if结构和C系语言类似。
#!/usr/bin/perl $t=true; if($t == true){ print "true\n"; } else { print "false\n"; }
26、读取1行键盘的输入,$line=<STDIN>
因此,读取用户输入并打印:
#!/usr/bin/perl $cnt=0; while($line=<STDIN>) { print $cnt.":".$line; }
27、去掉尾部的\n空行:chomp函数。
28、在Perl中,true的定义如下:
- 数值:0为false,其他均为true;
- 字符串:空串位false,其他均为true;
- 非scalar,无法比较true
29、while循环:
#!/usr/bin/perl $cnt=0; while($cnt<100) { print $cnt++."\n"; }
30、未被赋值的变量,也具有一个特殊值:undef。
31、接上条,可以用函数defined()判断一个变量是否已经定义。
#!/usr/bin/perl print defined($a)."\n"; # false(以0替代) $a="xx"; print defined($a)."\n"; # true
也可以用== undef判断。
#!/usr/bin/perl if($a==undef) { print "undef\n"; } else { print "def\n"; }