Perl 语言

(5 mins to read)

Perl 是一种脚本语言,它内置了正则表达式,在文本和字符串处理方面有一定的优势。

Perl one liners

Perl doc intro

运行

1
2
3
4
5
6
7
8
perl prog.pl
# 或者使用shebang
#!/usr/bin/env perl
## 使用#!/usr/bin/perl则固定了perl的路径,而以上写法会在env中查找perl的安装路径,不一定在/usr/bin下

# 捕获潜在的问题,在5.35版本及以上会自动启用(`use v5.35`)
use strict;
use warning;

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 注释

# 标量以$起始
my $var = 123; # 第一次使用变量使用my关键字进行声明,这是`use strict;`的要求,并且my会创建具有语法范围的变量,否则创建全局变量

# 数组以@起始,表示一列值,类型可以不同
my @arr = ("camel", 42, 1.23);
$arr[0]; # 第一个元素
$arr[#arr]; # 最后一个元素
@arr # 数组长度
## 获取多个值(切片)
@arr[0,1]; # ("camel", 42)
@arr[0..2]; # ("camel", 42, 1.23)
my @sorted_arr = sort @arr;
my @reversed_arr = reverse @arr;

# 哈希以%起始,表示一个键值对集合,内部顺序不定
my %fruit_color = (
apple => "red",
banana => "yellow",
);
$fruit_color{"apple"}; # "red"
my fruits = keys %fruit_color;
my colors = values @fruit_color;

# 条件语句
if ($var) {
...
} elsif ($var eq 'bar') {
...
} else {
...
}

unless (condition) { # 等价于 if (!condition)
...
}

## 单行条件块可以使用条件后置
print "123" if $var
print "345" unless $var

# 循环语句
while (condition) {
...
}

until (condition) { # 等价于 while (!condition)
...
}

for ($i = 0; $i <= 5; $i++) {
...
}

foreach (@array) {
...
}

# 特殊标量
$_ # 默认变量,在foreach中会绑定到当前元素,也可以对其进行赋值,它是一些函数和操作的隐式默认参数(print,m//)
foreach (1..5) {
print "$_\n";
}

# 函数
sub subroutine {
# @_是参数数组,$_[i]访问第i个参数
# 用return返回值,没有return则默认最后一行语句作为返回值
...
}

# 字符串
## 双引号会正常解析转义字符(包括换行符)和变量等,而单引号保持原样。

# 运算符
=
. # 字符串拼接
x # 字符串重复
.. # 范围运算符
<=> # 左边小返回-1,相等返回0,左边大返回1 `cmp`
q{} # 添加单引号
qq{} # 添加双引号
qx{} # 添加反引号

# 正则表达式
## 匹配 m/regex/,可省去m
## 替换 s/pattern/replacement/
## =~ 相匹配
## !~ 不匹配
if ($a =~ /regex/) { ... }
if ($email =~ /([^@]+)@(.+)/) {
print "Username is $1\n";
print "Hostname is $2\n";
}