Perl 以其丰富的特殊符号和操作符而闻名,这些符号是 Perl 表达能力强、代码简洁的重要原因。以下分类介绍:
$scalar = "hello"; # 单个值
$num = 42;
$ref = \@array; # 引用
@array = (1, 2, 3);
$array[0] = 10; # 访问单个元素用 $ 前缀
%hash = (a => 1, b => 2);
$hash{'a'} = 10; # 访问单个值用 $ 前缀
$_ # 默认标量,很多函数默认操作它
@_ # 子程序参数列表
$" # 数组内插到字符串时的分隔符,默认空格
$, # print 输出列表时的分隔符
$& # 最近一次模式匹配的文本(性能影响,少用)
$` # 匹配内容之前的文本
$' # 匹配内容之后的文本
$1, $2 # 捕获分组
$. # 当前行号
$/ # 输入记录分隔符,默认换行符
$\ # 输出记录分隔符
$| # 自动刷新缓冲区(=1 时自动刷新)
$scalar_ref = \$scalar;
$array_ref = \@array;
$hash_ref = \%hash;
$code_ref = \&subroutine;
$$scalar_ref # 标量引用解引用
@$array_ref # 数组引用解引用
%$hash_ref # 哈希引用解引用
&$code_ref() # 子程序引用调用
$array_ref->[0] # 箭头符号访问
$hash_ref->{key} # 箭头符号访问
@arr = (1, 2, 3);
$count = @arr; # 标量上下文:得到数组长度 3
@copy = @arr; # 列表上下文:复制数组
scalar(@array) # 强制标量上下文
() = /pattern/g # 列表上下文中的模式匹配
. # 字符串连接
x # 字符串重复
eq, ne # 字符串相等比较
lt, gt # 字符串小于/大于比较
<=> # 数值比较:-1,0,1
cmp # 字符串比较:-1,0,1
~~ # 智能匹配(Perl 5.10+)
.. # 列表范围(包含)
... # 列表范围(右开区间)
-e $file # 存在
-f $file # 普通文件
-d $dir # 目录
-r $file # 可读
-w $file # 可写
-x $file # 可执行
-s $file # 文件大小
=~ # 绑定操作符(匹配、替换)
!~ # 不匹配
m// # 匹配(可省略 m)
s/// # 替换
tr/// # 字符转换
y/// # tr 的同义词
/i # 忽略大小写
/s # 点号匹配换行符
/m # 多行模式
/x # 忽略空白和注释
/g # 全局匹配
q() # 单引号
qq() # 双引号
qx() # 反引号(执行命令)
qw() # 单词列表
qr() # 编译正则表达式
示例:
@list = qw(apple banana cherry);
$cmd = qx(date);
$regex = qr/\d+/;
print <<"EOF";
多行文本
EOF
my $text = <<'END';
不会内插的文本
$var 保持原样
END
statement if condition;
statement unless condition;
statement while condition;
statement until condition;
statement for @list;
last # 相当于 break
next # 相当于 continue
redo # 重新执行当前迭代
$! # 系统错误信息
$@ # eval 错误信息
$? # 子进程退出状态
[1, 2, 3] # 匿名数组引用
{a => 1, b => 2} # 匿名哈希引用
sub { ... } # 匿名子程序引用
#!/usr/bin/perl
use strict;
use warnings;
# 特殊变量的使用
while (<>) { # 从标准输入或文件读取,赋给 $_
chomp; # 默认操作 $_
print if /pattern/; # 默认匹配 $_
}
# 引用使用示例
my $config = {
name => 'test',
data => [1, 2, 3],
handler => sub { return "processed" }
};
print $config->{name}; # test
print $config->{data}->[0]; # 1
print $config->{handler}->(); # processed
Perl 的符号系统虽然复杂,但掌握后能写出非常简洁高效的代码。建议从常用符号开始学习,逐步深入。