learning perl读书笔记(一)

Chapter 2: scalar data

  • integer类型中可以加入下划线来增强可读性,如61_298_040_283_768
  • string类型可以用”x”来做repetition操作
1
2
"fred" x 3  #"fredfredfred"
5 x 4.8 #"5555"

Chapter 3: lists and arrays

A list is an ordered collection of scalars. An array is a variable that contains a list.

  • array中最后一个元素的index::$#array
  • list序列声明:(1..100)
  • qw声明list(每个元素不需要用引号来标识): qw(fred barney betty wilma dino),也可以用别的delimiter来表示:qw/red barney betty wilma dino/
  • foreach:
1
2
3
4
foreach $rock (qw/bedrock slate lava/){
print "one rock is $rock\n";
}
#如果在循环体内部改变每个元素的值,那么该原始对象也会被改变(循环的不是一份拷贝而是每个元素的直接引用)
  • 如果没有指定循环的控制变量,那么可以直接用$_来代替
1
2
3
 foreach (1..10) {  # Uses $_ by default
print "I can count to $_!\n";
}
  • $_在定义后也可以作为一个“缺省”变量,当之后的方法调用没有指定参数的时候,会被视为直接传入$_
1
2
$_ = "Yabba dabba doo\n";
print; # prints $_ by default
  • each关键字:返回array中下一个元素的index和value

Chapter 4: Subroutines

  • 函数的参数被存储在@中,可以用$\[0],$_[1]…的方法来取得
  • 函数的最后一个表达式可以被当作该函数的返回值;最后一个表达式的“;”号可以省略
  • my后面申明的lexical变量一定要用“()”包围,否刚只能接受一个参数
  • 静态变量的关键字是state

Chapter 5:Input and Output

  • 标准输入:\
  • 文件输入:./input.pl fred barney 类似这样的命令,可以将input.pl脚本同级目录下的fred和barney文件中的内容作为输入给到input.pl,在input.pl中可以通过<>操作来获取。<>也可以获取标准输入。它会按顺序来读取这些文件内容(相当于把所有的文件合并成了一个大的文件)
1
2
3
4
while (defined($line = <>)){
chomp($line);
print "It was $line that I saw\n";
}
  • @ARGV可以取到当前调用参数列表
  • ./your_program <dino >wilma 把文件dino中的内容人作为输入给your_program,输出内容直接写到wilma