1. 变量与常量
Perl 中使用 $
声明标量变量、@
声明数组、%
声明哈希。
my $name = "Alice"; # 标量
my @ages = (25, 30, 35); # 数组
my %scores = ("Alice" => 90, "Bob" => 80); # 哈希
注意事项:使用 my
声明局部变量,以避免变量冲突。
2. 数据类型
Perl 的标量变量可以存储字符串和数字,支持自动类型转换。
my $age = 25;
my $name = "Alice";
my $info = "$name is $age years old";
易错点:Perl 自动类型转换在数学运算中可能引起意外结果,使用 int()
强制转换为整数。
3. 条件语句
Perl 使用 if
、elsif
和 else
实现条件判断。
if ($age > 18) {
print "Adult\n";
} elsif ($age == 18) {
print "Just an adult\n";
} else {
print "Minor\n";
}
注意事项:条件判断中可使用 eq
、ne
进行字符串比较。
4. 循环
Perl 中的循环有 for
、foreach
、while
、until
。
foreach my $age (@ages) {
print "$age\n";
}
易错点:使用 foreach
遍历数组时,确保数组变量有效,避免未定义错误。
5. 子例程
Perl 使用 sub
定义子例程,参数通过特殊数组 @_
传递。
sub greet {
my ($name) = @_;
print "Hello, $name\n";
}
greet("Alice");
注意事项:子例程中的参数应通过 @_
解包,以避免参数混淆。
6. 文件操作
Perl 提供了文件操作的内置函数,使用 open
、close
进行文件读写。
open(my $fh, "<", "file.txt") or die "Cannot open file: $!";
while (my $line = <$fh>) {
print $line;
}
close($fh);
易错点:文件句柄使用完后要关闭,以释放资源。
7. 正则表达式
Perl 强大的正则表达式功能,使用 =~
进行匹配操作。
my $text = "Hello World";
if ($text =~ /World/) {
print "Match found!\n";
}
注意事项:正则表达式中使用 /i
忽略大小写。
8. 模块化
Perl 通过 use
引用模块,使用 require
加载文件。
use strict;
use warnings;
use Math::Complex;
易错点:使用 use strict
和 use warnings
提供更严格的代码检查。
9. 错误处理
Perl 使用 eval
处理运行时错误,通过 $@
获取错误信息。
eval {
die "An error occurred!";
};
if ($@) {
print "Error: $@\n";
}
注意事项:在使用 eval
时,需处理错误并提供友好信息。
高级与小众用法
特殊变量
Perl 提供了许多特殊变量,如 $_
、$@
、$/
。
$_ = "Hello";
print if /Hello/;
注意事项: $_
是默认变量,循环和正则匹配会自动使用。
自动化列表生成
Perl 支持列表生成,使用 ..
生成连续列表。
my @numbers = (1..10);
易错点:列表生成适用于连续值,字符间列表生成不适用。
条件修饰符
Perl 支持条件修饰符,如 print "hello" if $flag;
。
my $flag = 1;
print "Flag is true\n" if $flag;
注意事项:简化条件判断,但避免过度嵌套使用。
哈希操作
Perl 的哈希结构可以存储键值对,使用 keys
、values
进行操作。
my %data = ("Alice" => 25, "Bob" => 30);
foreach my $name (keys %data) {
print "$name is $data{$name} years old\n";
}
易错点:在哈希操作中,确保键名有效,避免访问未定义键。
动态数组与哈希
Perl 支持动态数组和哈希操作,允许随时添加或删除元素。
my @array = (1, 2, 3);
push @array, 4; # 添加到数组末尾
my %hash = ("name" => "Alice");
$hash{"age"} = 30; # 动态添加键值对
注意事项:动态操作会改变数组或哈希的大小,需检查操作后的内容。