Perl语言入门,俗称小骆驼书,是Perl的入门教程. Perl有很多类似shell的特殊变量,特殊用法,很多需要记忆的东西.通读之后还有很多没有记住的内容,所以又看一遍,把一些大体的内容,特殊用法,注意问题等需要记忆的东西整理出来,以备查阅.
#!/usr/bin/perl 小骆驼书 第二章 整数直接量可以用_分割,如 61_298_040_283 乘幂运算符 ** 字符串连接 . 字符串重复 x example:"fred" x 3; #复制次数使用前取整,小于1时得到空字符串 打开警告信息: 1. perl -w perl_program 2. #!/usr/bin/perl -w 3. use warnings; 4. use diagnostics; 显示警告信息和详细的诊断信息 print 输出一系列用逗号隔开的值 进行变量内插时,Perl会尽可能使用最长且合法的变量名称,否则应该用${var_name}方式,或者分割字符串 操作符优先级,查看 perldoc perlop 数值比较: == != < > <= >= 字符串比较: eq ne lt gt le ge chomp 是函数,仅删除字符串后的一个换行符。输入分割符($/)控制输入 undef 代表未定义的值,会被当成 0 空字符串 假值 defined 测试是否为undef 第三章 数组的命名空间和标量的命名空间是分开的 $fred和 @fred, $fred[0] 不相关 $[ 特殊变量可以控制数组的开始下标。默认为0。可以查看perlvar中的特殊变量 特殊索引:$#rocks为@rocks最后一个下标值,如$rocks[$#rocks] == $rocks[-1] 负值索引为从后起的索引,-1为最后一个索引 列表直接量:范围操作符: .. (1, 2, 3) (1..5) == (1.7..5.7) (5..1) #空列表 qw表示"quoted word"或"quoted by whitespace". qw(fred barney) == ("fred", "barney") 不过qw内相当于单引号,不能变量内插和转义,空白字符会被舍弃 qw/.../ qw#...# qw<...>为同义,定界符之内使用定界符需要转义 ($fred, $barney) = ($barney, $fred); #互换两者的值 ()为空列表,列表内只能是标量,不能包含其他数组。 $fred = pop @array;#同 pop(@array); push @array, 1..10;#同 push(@array, 1..10); $fred = shift(@array); unshift @array, 1..3; 数组内插到字符串中时,会在各元素之间添加分隔用的空格,空格是由$" 内置变量控制". foreach $rock (@rocks){} foreach (@rocks){print $_;} sort, reverse 不会修改原数组,所以要保存结果。 @fred = reverse @fred; 在列表上下文中,@array 将返回数组所有元素连成的字符串,而在标量上下文中将返回数组的元素个数 强制使用标量上下文:scalar @rocks $line = <STDIN>; #读取一行 @lines = <STDIN>; #读取所有的行 第四章 子程序:sub name {code here} 使用&name();调用 perl子程序最后一次运算的结果自动成为返回值 子程序参数列表:@_ 类似与javascript中的arguments参数 perl的变量默认为全局变量,通过my 创建私有的词法变量,如 my($m, $n) = @_; my 不使用括号时,只能声明单个词法变量 可以用use strict; 强制使用严格的语言规则 调用子程序时,当在调用之前声明子程序,且子程序名称不与perl内置函数同名时,可以省略& 以及括号 在列表上下文中调用子程序,就能返回列表值.可以使用wantarray函数来判断子程序是在标量上下文还是列表上下文中被执行 可以使用state声明持久性私有变量.类似C中的静态变量,在子程序的多次调用间保留该变量的值.如 state $n = 0; 但是目前在列表上下文中初始化 state 变量是被禁止的.另外,使用state应该使用use 5.010;默认版本不支持 第五章 当把<STDIN>作为while或foreach的条件表达式时,会读入一行并自动存入$_,其他地方不会自动存入"老地方"变量. 语法:while (<STDIN>){print "I saw $_ ";} 钻石操作符<>,为行输入的特殊情况,从命令行参数的文件中读取输入,若为空则从标准输入流读取 @ARGV 数组保存调用程序时的参数, $0 保存程序的文件名 print 的调用如果看起来像一个函数调用,那么它就是一个函数调用. print (2+3)*4; 会输出5,将2+3作为参数 printf 类似C的同名函数,如果输出数组,则格式字符串里的格式数目须等于数组元素数目,可以用 "%10sn" x @items; 动态生成格式字符串 六个perl保留文件句柄:STDIN STDOUT STDERR DATA ARGV ARGVOUT 打开文件句柄方法: open CONFIG, "dino"; open config, "<dino"; open LOG, ">>logfile";也可以用三个参数的写法: open CONFIG, "<", "dino"; open LOG, ">>", $filepath; die 结束运行并输出错误信息,系统错误信息保存在$! 变量中.只在系统服务请求失败后输出 $! 内容.die还会将出错的程序名和行号加在信息的最后. 行输入操作符由尖括号(真正的行输入操作符)和用来输入的文件句柄组成. print, printf 向文件输出时,在后面跟文件句柄,然后是输出的内容.文件句柄与输出内容间无逗号.如: print LOG "Captain's log, somethingn"; 这两种写法也可以: printf (STDERR "%d percent complete.n", $done/$total * 100); OR printf STDERR ("%d percent complete.n", $...); print, printf 的默认输出句柄为STDOUT. 可以用select 改变默认文件句柄. 但处理完毕后最好改回STDOUT. $| 变量设置为1,则输出时立刻刷新缓冲区. use 5.010; 来使用Perl 5.10版本. 从此版本之后有say函数.类似 println 第六章 哈希变量用%做前缀.赋值可以用 $hashname{'fred'}='sth'; or %hashname = ("foo",10,"bar",122); @array = %hash;列表上下文中,会自动松绑成简单的键值对的列表.在标量上下文的 $scalar = %hash; 将返回hash的内部调试用的字符串(如:3/8, 可以作为布尔值判断是否为空.). %new_hash = reverse %any_hash; 将哈希松绑后翻转再赋值.所以结果是键值互换的hash. 如果hash值不唯一,则有一部分数据会丢失(后边覆盖前边,但是hash内部无固定顺序). 使用胖箭头赋值更常用:my %some_hash = ("fred" => "this is fred", "foo" => "foo, aha", "bar" => "Not that bar!");类似PHP的数组. keys 将返回键列表,values 返回值列表. 顺序不可预测,但是两个函数顺序对应. while ( ($key, $value) = each %hash){code here...} 可以用此方法便利hash.遍历顺序与keys 的顺序相同.keys values 能重置定位器,所以不要在遍历时使用. foreach $key (sort keys %hash){ $value = $hash{$key}; code here...} 也可以用此方法遍历hash. exists 判断hash中是否有某个键,而与键对应的值无关. if (exists $hash{"dino"} ){...} delete 删除指定键及其对应的值. delete $books{'betty'}; 若不存在,直接结束. %ENV代表系统的环境变量. 可以用$ENV{PATH} 输出bash的环境变量中PATH变量的值.