> 只要不会因为拿掉括号而改变愿意,括号就是可省略的。
不同语言的设计逻辑确实有差异,需要抛开C的思维,打开Perl的思路。
打开警告
undef
状态码
退出值0代表正常,非零退出代表异常。
默认变量
$!只能捕获系统调用相关错误。
环境变量
比如PATH
在程序开始时候,%ENV会保留从父进程继承而来的设定值。修改该值会被新进程继承。但修改从父进程继承的环境变量并不能影响shell或者其他父进程。
数组越界不奔溃(未初始化的为undef)
双引号会把变量替换
单引号除了单引号和反斜线字符外,其他字符都代表它们自己( 表示一个反斜线和n)
可能splice看起来不起眼,但在其他语言中要实现相同功能并不轻松。许多人为了达到相同目的,使用各种复杂概念和技术,比如链表什么的,但这无疑是把程序员的时间浪费在低层次的数据处理上,既不合理也不高明。
数组和普通变量可以共用一个名字!所以取名可以参考前缀
@可以获得整个数组
chomp函数可以去掉一行字符串的最后一个换行符(如果有的话)
foreach中的控制变量(item)在循环中并不是数组变量的拷贝,而是变量自身!因此在循环中修改了控制变量就会修改数组本身!同时,控制变量作用域是仅限于foreach,与前面定义的不冲突。
sort是按字符在计算机内部编码顺序排序的!所以如果要排序需要注意排序结果,比如要对数字排序,那么使用sort可能不对
上下文
标量上下文和列表上下文。同一个表达式在不同的地方会有不同的意义。
比如
@people = sort @data
$number =42 + @data
一个是对data排序,一个是计算42+data这个数组的元素个数!
可以使用scalar强制指定标量上下文
常量,空字符串
可以使用readonly来描述
多行字符串
如果有字符串要多行,应该在每个换行符之后断开,再使用“.”连接起来
如果内容太多,可以用heredoc
qw
不要在qw操作符内误用逗号,它会被当做是字符串的一部分。Perl会用空格分割qw内字串。
第十六章 进程管理
可以使用system或者exec
system会创建子进程,子进程会在perl睡眠期间执行(也可以创造后台进程)
exec会使Perl进程自己去执行任务。这类似子程序调用与"goto"的差别。
当运行到exec时候,Perl执行对应命令,此后就没有Perl进程了,这样在命令结束后就没有Perl进程在等待。可以用于使用Perl给对应命令设置启动的环境变量。(学习Perl 276页)
一旦要执行的命令启动后Perl便退出,后面的代码也都无法运行,但如果命令启动失败,后续的错误捕获命令还是可以运行的。
可以使用反引号``来代替单或双引号,用来捕捉命令的输出。
使用system启动子进程时候可以向里面传递参数,如果需要传入的参数是给命令用,那么就需要注意是否是要把参数内插。
system 'ls $HOME'
注意使用单引号与双引号是有差异的。