Perl读书笔记(1)

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";
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *