Skip to content

Perl 基础语法

Hello World 程序

让我们从经典的 Hello World 程序开始:

perl
#!/usr/bin/perl
use strict;
use warnings;

print "Hello, World!\n";

代码解释:

  • #!/usr/bin/perl:称为 shebang,告诉系统使用哪个解释器执行脚本
  • use strict;:启用严格模式,强制声明变量
  • use warnings;:启用警告,帮助发现潜在问题
  • print:输出函数
  • \n:换行符

运行程序:

bash
chmod +x hello.pl
./hello.pl

Perl 程序结构

基本结构

一个完整的 Perl 程序包含以下部分:

perl
#!/usr/bin/perl          # Shebang 行(可选,但推荐)

# Pragma(编译指令)
use strict;
use warnings;
use v5.38;               # 指定 Perl 版本

# 主程序代码
# ... 你的代码 ...

1;                       # 返回真值(模块中需要)

注释

Perl 使用 # 符号表示注释:

perl
# 这是单行注释

use strict;  # 行尾注释也可以

=begin comment
这是多行注释
可以跨越多行
=end comment

=for comment
这也是多行注释的
另一种方式
=cut

Perl 语句

语句分隔符

Perl 使用分号 ; 作为语句分隔符:

perl
print "第一条语句\n";
print "第二条语句\n";

注意:最后一个语句的分号可以省略,但为了清晰起见,建议总是使用分号。

语句块

语句块用花括号 {} 包围:

perl
{
    print "语句块开始\n";
    print "语句块内的代码\n";
    print "语句块结束\n";
}

输出语句

perl
print "Hello\n";           # 基本输出
print "Hello", " ", "World", "\n";  # 多参数输出

# 不加换行符
print "Hello ";            # 输出:Hello World
print "World\n";

say 函数(Perl 5.10+)

say 函数自动在末尾添加换行符:

perl
use v5.10;  # 或更高版本

say "Hello";      # 自动添加 \n
say "World";      # 每个输出都在新行

printf 函数

格式化输出:

perl
my $name = "Alice";
my $age = 25;

printf "Name: %s, Age: %d\n", $name, $age;
# 输出:Name: Alice, Age: 25

# 格式化数字
printf "Pi: %.2f\n", 3.14159;  # 输出:Pi: 3.14

printf "Decimal: %d, Hex: %x, Octal: %o\n", 255, 255, 255;
# 输出:Decimal: 255, Hex: ff, Octal: 377

输入语句

从标准输入读取

perl
print "请输入你的名字: ";
my $name = <STDIN>;
chomp $name;               # 移除末尾的换行符
print "你好, $name!\n";

简化写法

perl
print "请输入你的名字: ";
chomp(my $name = <STDIN>);
print "你好, $name!\n";

读取一行

perl
my $line = <STDIN>;    # 读取一行(包括换行符)
my $line2 = <>;        # 简写,等同于 <STDIN>

变量声明

使用 strict 和 warnings

perl
#!/usr/bin/perl
use strict;
use warnings;

# 必须声明变量
my $name = "Alice";
print "$name\n";

# 未声明的变量会报错
# print $age;  # 错误:Global symbol "$age" requires explicit package name

my 声明局部变量

perl
my $name = "Bob";      # 声明并初始化
my $age;               # 声明但不初始化(值为 undef)
$age = 30;             # 赋值

print "$name is $age years old\n";

our 声明全局变量

perl
our $global_var = "global";

local 临时修改变量

perl
our $var = "original";

{
    local $var = "modified";  # 临时修改
    print "Inside block: $var\n";  # 输出:modified
}

print "Outside block: $var\n";      # 输出:original

代码风格建议

缩进

使用 4 个空格或 1 个 tab 进行缩进:

perl
if ($condition) {
    print "条件为真\n";
    if ($another_condition) {
        print "嵌套条件\n";
    }
}

变量命名

perl
# 标量:小写字母,单词间用下划线
my $user_name = "Alice";
my $userAge = 25;         # 驼峰命名也可以

# 数组:复数形式或加后缀
my @users = ("Alice", "Bob");
my @user_list = ("Alice", "Bob");

# 哈希:复数形式或加后缀
my %user_data = (name => "Alice", age => 25);
my %scores = (math => 90, english => 85);

括号使用

perl
# 函数调用可以省略括号
print "Hello\n";
print("Hello\n");        # 也可以使用括号

# 条件判断建议使用括号
if ($condition) {
    # ...
}

编译和执行

直接执行

bash
perl script.pl

作为脚本执行

bash
chmod +x script.pl
./script.pl

检查语法(不执行)

bash
perl -c script.pl

启用警告

bash
perl -w script.pl

调试模式

bash
perl -d script.pl

实践示例

示例 1:简单计算器

perl
#!/usr/bin/perl
use strict;
use warnings;

print "请输入第一个数字: ";
chomp(my $num1 = <STDIN>);

print "请输入第二个数字: ";
chomp(my $num2 = <STDIN>);

print "请选择操作 (+, -, *, /): ";
chomp(my $op = <STDIN>);

my $result;

if ($op eq '+') {
    $result = $num1 + $num2;
} elsif ($op eq '-') {
    $result = $num1 - $num2;
} elsif ($op eq '*') {
    $result = $num1 * $num2;
} elsif ($op eq '/') {
    $result = $num1 / $num2;
} else {
    print "无效的操作符\n";
    exit;
}

printf "结果: %.2f\n", $result;

示例 2:用户信息收集

perl
#!/usr/bin/perl
use strict;
use warnings;

print "=== 用户信息收集 ===\n";

print "姓名: ";
chomp(my $name = <STDIN>);

print "年龄: ";
chomp(my $age = <STDIN>);

print "城市: ";
chomp(my $city = <STDIN>);

print "\n=== 用户信息 ===\n";
printf "姓名: %s\n", $name;
printf "年龄: %d\n", $age;
printf "城市: %s\n", $city;

if ($age >= 18) {
    print "状态: 成年人\n";
} else {
    print "状态: 未成年人\n";
}

示例 3:多行输入处理

perl
#!/usr/bin/perl
use strict;
use warnings;

print "请输入多行文本(Ctrl+D 结束):\n";
my @lines = <STDIN>;    # 读取所有行到数组

print "\n你输入了 " . scalar(@lines) . " 行:\n";
print @lines;          # 输出所有行

常见错误

1. 忘记分号

perl
print "Hello\n"    # 错误:缺少分号
print "World\n";   # 语法错误

2. 未声明变量

perl
use strict;
print $name;       # 错误:需要声明变量

3. 混淆标量和数组

perl
my @numbers = (1, 2, 3);
print $numbers;    # 错误:应该用 @numbers 或 $numbers[0]

4. 拼写错误

perl
my $name = "Alice";
print "$nmae\n";   # 错误:变量名拼写错误

小结

本章节学习了 Perl 的基础语法:

  1. ✅ 程序结构和注释
  2. ✅ 输入输出语句
  3. ✅ 变量声明
  4. ✅ 代码风格规范
  5. ✅ 编译和执行方法

接下来,我们将学习 Perl 数据类型