Perl 教學網站 | 香港編程學院 | Perl課程

基礎語法文字處理,一次學會 Perl

Perl 編程語言完整繁體中文教學網站,包含Perl入門語法教學、範例應用、小測驗與參考資源。 你會學到Perl用法、Perl安裝教學、變數、陣列、雜湊、條件判斷、迴圈、子程序、正規表達式、檔案讀寫,以及 Perl 的物件導向基礎。

單檔 HTML 可直接使用 繁體中文教學 含範例程式碼 含互動式小測驗 適合初學者到進階入門
1. 認識 Perl

Perl 是什麼?

Perl 是一種擅長文字處理、系統管理、自動化與腳本撰寫的通用程式語言。它對於日誌分析、檔案轉換、批次任務、正規表達式處理特別有名。

文字處理很強

Perl 的正規表達式能力非常成熟,常被用在資料清洗、日誌分析與字串抽取。

語法彈性高

Perl 支援多種寫法,適合快速完成腳本任務,但也需要養成良好可讀性習慣。

適合自動化

從批次重新命名檔案到讀寫文字報表,Perl 很適合做日常工具與維運腳本。

一句話理解: 如果你常常需要「讀文字 → 比對格式 → 轉換資料 → 輸出結果」,Perl 會非常好用。
主題 Perl 的表現 適合情境
字串處理 非常強 清洗資料、抽取欄位、文字報表
正規表達式 核心強項 日誌分析、驗證格式、搜尋取代
檔案讀寫 方便快速 批次處理、匯入匯出、文字工具
系統腳本 成熟穩定 自動化、排程、維運腳本
2. 安裝與第一支程式

快速開始

大多數 Linux 與 macOS 環境通常已內建 Perl。Windows 則可安裝 Strawberry Perl 或 ActivePerl。確認是否安裝成功,可先在終端機輸入:

終端機指令
perl -v

如果看到版本資訊,就表示 Perl 可正常執行。

第一支 Perl 程式

建立一個 `hello.pl` 檔案,並輸入最基本的輸出程式。

Hello World
use strict;
use warnings;

print "Hello, Perl!\n";

接著在終端機執行:

執行方式
perl hello.pl
為什麼推薦一定寫 `use strict;` 與 `use warnings;`?
它們能幫你提早發現拼字錯誤、變數未宣告、潛在邏輯問題,是 Perl 初學者非常重要的好習慣。
3. 基本語法

先掌握 Perl 程式的骨架

Perl 程式由「敘述」組成,大多數簡單敘述以分號結尾。註解使用 `#`,而區塊則使用大括號 `{ ... }` 包住。

分號 `;`

多數敘述句結尾需要分號,這是最常見的初學錯誤之一。

註解 `#`

從 `#` 到該行結尾都會被視為註解,不會執行。

區塊 `{}`

條件判斷、迴圈與子程序通常都使用大括號包住程式區塊。

宣告變數

建議使用 `my` 宣告區域變數,讓程式更安全、更容易維護。

基本語法示範
use strict;
use warnings;

my $name = "Amy";   # 字串變數
my $age  = 20;      # 數值變數

print "姓名:$name\n";
print "年齡:$age\n";
4. 資料型別

Scalar、Array、Hash 是 Perl 最核心的資料結構

型別 Sigil(符號) 用途 範例
純量 Scalar $ 單一值,例如字串、數字、參照 my $name = "Tom";
陣列 Array @ 有順序的值清單 my @colors = ("red", "blue");
雜湊 Hash % 鍵值對資料 my %user = (name => "Amy");

4.1 Scalar 純量

純量變數
my $language = "Perl";
my $version  = 5.38;
my $is_fun   = 1;

print "$language 版本:$version\n";

4.2 Array 陣列

陣列操作
my @fruits = ("apple", "banana", "orange");

print $fruits[0], "\n";   # apple
print scalar(@fruits), "\n";  # 陣列長度

push @fruits, "grape";
pop @fruits;

foreach my $fruit (@fruits) {
    print "水果:$fruit\n";
}

4.3 Hash 雜湊

雜湊操作
my %student = (
    name  => "小明",
    age   => 18,
    major => "資訊工程"
);

print $student{name}, "\n";

$student{grade} = "A";

foreach my $key (keys %student) {
    print "$key => $student{$key}\n";
}
重點: 整個陣列用 @,但取單一元素時會改用 $,例如 $fruits[0]。Hash 取單一值也用 $student{name}
5. 流程控制

條件判斷、迴圈、敘述修飾子

Perl 提供 `if`、`unless`、`elsif`、`while`、`for`、`foreach` 等控制結構,也支援很有特色的「敘述修飾子」寫法。

if / elsif / else

依照條件決定執行哪段程式碼。

unless

當條件不成立時執行,可視為「反向 if」。

while / until

適合重複執行直到條件改變。

for / foreach

遍歷清單或以傳統索引方式控制次數。

條件判斷
my $score = 85;

if ($score >= 90) {
    print "A\n";
} elsif ($score >= 80) {
    print "B\n";
} else {
    print "再加油\n";
}
迴圈與修飾子
for my $i (1..5) {
    print "第 $i 次\n";
}

my $x = 1;
while ($x <= 3) {
    print "x = $x\n";
    $x++;
}

print "成年人\n" if 20 >= 18;
字串比較與數值比較不要混用:
數值比較通常用 ==!=><;字串比較則常用 eqnegtlt
6. 子程序

把重複邏輯包成可重用的函式

Perl 使用 `sub` 來定義子程序。傳入的參數通常會放在特殊陣列 `@_` 中,初學時常用 `my ($a, $b) = @_;` 來取參數。

基本子程序
sub add {
    my ($a, $b) = @_;
    return $a + $b;
}

my $result = add(3, 5);
print "結果:$result\n";

定義方式

使用 `sub 名稱 { ... }` 來建立子程序。

參數取得

常見做法是把 `@_` 的內容解構到區域變數中。

回傳值

可使用 `return`,也可以讓最後一行表達式成為回傳值。

用途

避免重複程式碼,讓程式結構更清楚。

7. 正規表達式

Perl 最具代表性的功能之一

如果你學 Perl,只會基本語法還不夠;正規表達式才是 Perl 真正的戰力來源。它可以用來搜尋、驗證、取代、分割文字。

語法 功能 範例
/word/ 搜尋字串是否包含某文字 "Hello" =~ /ell/
\d 數字字元 /\d+/
\s 空白字元 /\s+/
\w 英數與底線 /\w+/
^ / $ 字串開頭 / 結尾 /^\d+$/
() 分組與擷取 /(\d\d):(\d\d)/
s/// 搜尋並取代 $x =~ s/cat/dog/;
split 依規則切割字串 split /,/, $line
基本比對
my $text = "My phone is 0912-345-678";

if ($text =~ /\d{4}-\d{3}-\d{3}/) {
    print "找到電話格式\n";
}
擷取資料
my $time = "現在時間是 12:34:56";

if ($time =~ /(\d\d):(\d\d):(\d\d)/) {
    my ($hour, $min, $sec) = ($1, $2, $3);
    print "時:$hour 分:$min 秒:$sec\n";
}
搜尋取代與切割
my $x = "I like cat";
$x =~ s/cat/dog/;
print "$x\n";   # I like dog

my $csv = "Amy,18,CS";
my @fields = split /,/, $csv;
print $fields[0], "\n";
初學者最值得先學的 regex 核心: 字面比對、`[]` 字元類別、`\d \s \w`、`+ * ? {n,m}` 量詞、`()` 分組、`^` 與 `$` 錨點、`s///` 取代。
8. 檔案操作

讀檔、寫檔、附加內容

現代 Perl 建議使用三參數 `open`,可讀性更高,也比較安全。文字檔建議明確指定編碼,例如 UTF-8。

1

讀取檔案

使用 `<` 模式開啟文字檔,逐行讀取最常見。

2

覆寫寫入

使用 `>` 模式,原有內容會被清空後重新寫入。

3

附加寫入

使用 `>>` 模式,會把新內容接在檔案後面。

讀取 UTF-8 文字檔
use strict;
use warnings;

my $file = "data.txt";
open(my $fh, "<:encoding(UTF-8)", $file)
    or die "無法開啟檔案:$!";

while (my $line = <$fh>) {
    chomp $line;
    print "讀到:$line\n";
}

close $fh;
寫入檔案
my $file = "output.txt";
open(my $fh, ">:encoding(UTF-8)", $file)
    or die "無法寫入檔案:$!";

print $fh "Perl 檔案寫入成功!\n";
close $fh;
附加內容
my $file = "log.txt";
open(my $fh, ">>:encoding(UTF-8)", $file)
    or die "無法附加寫入:$!";

print $fh "新增一行紀錄\n";
close $fh;
常見錯誤: 忘記 `close`、沒有處理編碼、直接使用舊式二參數 `open`,都可能造成問題。
9. 物件導向入門

Perl 也能寫 OOP

在 Perl 中,任何 package 都可以扮演 class。常見做法是用 hash 來儲存物件資料,再以 `bless` 讓它成為一個物件。

最小可用的物件範例
package Animal;
use strict;
use warnings;

sub new {
    my ($class, $name) = @_;
    my $self = {
        name => $name
    };
    bless $self, $class;
    return $self;
}

sub speak {
    my ($self) = @_;
    print $self->{name} . " 說:Hello!\n";
}

package main;

my $cat = Animal->new("小白");
$cat->speak();

Class 類別

定義一群物件共有的行為與結構。

Object 物件

從類別建立出來的實體,擁有資料與方法。

Method 方法

其實就是子程序,只是透過物件呼叫,例如 `$obj->run()`。

10. 範例應用

把語法真正用在實務上

下面提供三個常見的 Perl 應用範例:文字統計、簡易日誌分析、CSV 解析。這些都是 Perl 很典型的用途。

範例一:統計文字檔中有多少行

行數統計器
use strict;
use warnings;

my $file = "article.txt";
open(my $fh, "<:encoding(UTF-8)", $file) or die "無法開啟:$!";

my $count = 0;
while (<$fh>) {
    $count++;
}

close $fh;
print "總行數:$count\n";

範例二:分析日誌中 ERROR 的數量

日誌分析器
use strict;
use warnings;

my $file = "server.log";
open(my $fh, "<:encoding(UTF-8)", $file) or die "無法開啟:$!";

my $error_count = 0;

while (my $line = <$fh>) {
    $error_count++ if $line =~ /ERROR/;
}

close $fh;
print "ERROR 次數:$error_count\n";

範例三:解析簡單 CSV 資料

CSV 解析
use strict;
use warnings;

my $line = "Amy,18,Computer Science";
my @fields = split /,/, $line;

print "姓名:$fields[0]\n";
print "年齡:$fields[1]\n";
print "科系:$fields[2]\n";
延伸思考: 你可以把這些小範例整合起來,做成「讀取多個檔案 → 抽取指定格式 → 統計結果 → 輸出報表」的實用工具。
11. 小測驗

測試你是否真的學會了

做完下面 8 題,你就能快速檢查自己對 Perl 基礎是否有掌握。按下「提交答案」後會自動計分。

1. Perl 中用來宣告區域變數最常見的關鍵字是什麼?
2. 哪一個符號代表整個陣列?
3. 哪個寫法是 Hash 取值?
4. 哪個運算子常用來做字串相等比較?
5. 正規表達式中的 `\d` 代表什麼?
6. 若要使用三參數 `open` 讀取檔案,應使用哪個模式?
7. 子程序接收參數時,最常放在哪個特殊陣列中?
8. Perl 中要把普通資料結構轉成物件,通常使用什麼?
12. 參考資料

官方文件與延伸學習

如果你打算繼續深入學習,下面這些官方資源非常值得收藏。這份網站內容也主要根據這些文件整理。

perlsyn

Perl 基本語法、敘述規則與流程控制。

perldata

Scalar、Array、Hash 與 Sigil 的核心說明。

perlsub

子程序定義、呼叫方式與參數傳遞。

perlretut

正規表達式教學文件,適合初學者。

perlrequick

Regex 快速入門版,適合複習與速查。

perlopentut

現代 Perl 檔案開啟與讀寫教學。

perlootut

Perl 物件導向教學入門。

Learn Perl 文件入口

Perl.org 的學習資源總覽頁。

推薦先讀:perlsyn 重要必讀:perldata 實務常用:perlretut 讀檔寫檔:perlopentut 延伸進階:perlootut