Perl 编程学习笔记

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 使用 ifelsifelse 实现条件判断。

if ($age > 18) {
    print "Adult\n";
} elsif ($age == 18) {
    print "Just an adult\n";
} else {
    print "Minor\n";
}

注意事项:条件判断中可使用 eqne 进行字符串比较。

4. 循环

Perl 中的循环有 forforeachwhileuntil

foreach my $age (@ages) {
    print "$age\n";
}

易错点:使用 foreach 遍历数组时,确保数组变量有效,避免未定义错误。

5. 子例程

Perl 使用 sub 定义子例程,参数通过特殊数组 @_ 传递。

sub greet {
    my ($name) = @_;
    print "Hello, $name\n";
}
greet("Alice");

注意事项:子例程中的参数应通过 @_ 解包,以避免参数混淆。

6. 文件操作

Perl 提供了文件操作的内置函数,使用 openclose 进行文件读写。

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 strictuse 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 的哈希结构可以存储键值对,使用 keysvalues 进行操作。

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;  # 动态添加键值对

注意事项:动态操作会改变数组或哈希的大小,需检查操作后的内容。