Linux中國

Perl 語言基礎入門

Perl 發佈於 1988 年初,是一種後現代的編程語言,它通常被認為是一種腳本語言,但它也能進行面向對象的編程。它是一種成熟的語言,擁有 數以萬計的庫、GUI 框架,它有一種叫做 Raku 的衍生語言(即 Perl 6),以及一個活躍而熱情的社區。它的開發者以其靈活性為榮。根據它的創造者 Larry Wall 的說法,Perl 並不對它的用戶強加任何特定的編程風格,而且有不止一種方法來完成大多數事情。

Perl 非常健壯,它曾經被廣泛使用,這使它成為新的程序員可以嘗試的偉大語言。

Perl 基礎知識

在 Linux 和 macOS 上,你已經安裝了 Perl。在 Windows 上,請從 Perl 網站 下載並安裝它。

Perl 表達式

Perl 源代碼的基本單位是 表達式,它是任何能返回一個 的東西。

例如,1 是一個表達式,它返回 1 的值。表達式 2 返回 2 的值,而 a 返回字母 a

表達式可以更複雜。表達式 $a + $b 包含變數(數據的佔位符)和加號(+),它是一個數學運算符。

Perl 語句

Perl 語句是由表達式組成的。每個語句都以分號(;)結束。

比如說:

$c = $a + $b;

要嘗試運行你自己的 Perl 語句,請打開終端並輸入:

$ perl -e 'print ("Hello Perln");'

Perl 語句塊

Perl 語句塊可以用大括弧({ })組合起來。塊是一種有用的組織工具,但它們也為那些你可能只需要在程序的一小部分使用的數據提供了 範圍。Python 用空白定義範圍,LISP 用小括弧,而 C 和 Java 用大括弧。

變數

變數是數據的佔位符。人類每天都在使用變數而沒有意識到它。例如,「它」這個詞可以指代任何名詞,所以我們把它作為一個方便的佔位符。「找到我的手機並把它拿給我」實際上是指「找到我的手機並把我的手機拿給我。」

對於計算機來說,變數不是一種便利,而是一種必需品。變數是計算機識別和跟蹤數據的方式。

在 Perl 中,你通過聲明一個變數名稱和它的內容來創建變數。

在 Perl 中,變數名稱前面總是有一個美元符號($)。

這些簡單的語句創建了一個包含 "Hello""Perl" 字元串的變數 $var,然後將該變數的內容列印到終端:

$ perl -e '$var = "hello perl"; print ("$varn");'

流程式控制制

大多數程序需要做出決定,這些選擇由條件語句和循環來定義和控制。if 語句是最直觀的一種。Perl 可以測試一個特定的條件,然後 Perl 根據這個條件決定程序如何進行。其語法類似於 C 或 Java:

my $var = 1;

if ($var == 1) {
  print("Hello Perln");
}
elsif ($var == 0){
  print("1 not found");
}
else {
  print("Good-bye");
}

Perl 也有一個簡短的 if 語句的形式:

$var = 1;

print("Hello Perln") if ($var == 1);

函數和子程序

儘可能多地重複使用代碼是一種有益的編程習慣。這種做法可以減少錯誤(或將錯誤合併到一個代碼塊中,因此你只需修復一次),使你的程序更容易維護,簡化你的程序邏輯,並使其他開發者更容易理解它。

在 Perl 中,你可以創建一個 子程序,它接受輸入(存儲在一個特殊的數組變數 @_ 中)並可能返回一個輸出。你可以使用關鍵字 sub 來創建一個子程序,後面跟一個你選擇的子程序名稱,然後是代碼塊:

#!/usr/bin/env perl

use strict;
use warnings;

sub sum {
  my $total = 0;

  for my $i(@_){
    $total += $i;
  }

  return($total);
}

print &sum(1,2), "n";

當然,Perl 有許多子程序,你不必自己去創建。有些是內置於 Perl 中的,而社區庫則提供了其他的。

用 Perl 編寫腳本

Perl 可以被編譯,也可以作為一種解釋型的腳本語言使用。後者是剛入門時最簡單的選擇,特別是如果你已經熟悉了 Python 或 shell 腳本

這裡有一個用 Perl 編寫的簡單的擲骰子腳本。把它讀一遍,看看你是否能跟上它。

#!/usr/bin/env perl

use warnings;
use strict;
use utf8;
binmode STDOUT, ":encoding(UTF-8)";
binmode STDERR, ":encoding(UTF-8)";

my $sides = shift or
  die "nYou must provide a number of sides for the dice.n";

sub roller {
    my ($s) = @_;

    my $roll = int(rand($s));
    print $roll+1, "n";
}

roller($sides);

第一行告訴你的 POSIX 終端要使用什麼可執行文件來運行該腳本。

接下來的五行是模板式的包含內容和設置。use warnings 的設置告訴 Perl 檢查錯誤,並在終端對它發現的問題發出警告。use strict 設置告訴 Perl 在發現錯誤時不要運行腳本。

這兩個設置都可以幫助你在代碼中的錯誤導致問題之前發現它們,所以通常最好在你的腳本中激活它們。

腳本的主要部分開始於對腳本從終端啟動時提供給它的 參數 進行分析。在這種情況下,預期的參數是一個虛擬骰子的所需的面的數量。Perl 將其視為一個堆棧,並使用 shift 函數將其分配給變數 $sides。當沒有提供參數時,die 函數會被觸發。

sub 關鍵字創建的 roller 子程序(或函數),使用 Perl 的 rand 函數生成一個偽隨機數,最大不超過參數的數字。這意味著在這個程序中,一個 6 面的骰子不可能擲出 6,但它可以擲出 0。這對計算機和程序員來說是沒有問題的,但對大多數用戶來說,這是令人困惑的,所以它可以被視為一個 bug。為了在這個 bug 成為問題之前解決它,下一行在隨機數上加 1,並將結果作為擲骰子的結果列印出來。

當引用傳遞給子程序的參數時,你引用的是特殊變數 @_,它是一個數組,包含了函數調用時括弧內的所有內容。然而,當從數組中提取一個值時,數據被轉換成一個標量(例子中的 $s 變數)。

子程序在被調用之前不會運行,所以腳本的最後一行調用了自定義的 roller 函數,將命令的參數作為函數的參數。

將該文件保存為 dice.pl,並標記為可執行:

$ chmod +x dice.pl

最後,嘗試運行它,為它提供一個最大的數字,從中選擇其隨機數:

$ ./dice.pl 20
1
$ ./dice.lisp 20
7
$ ./dice.lisp 20
20

沒問題!

Perl 速查表

Perl 是一種有趣而強大的語言。儘管自從 Perl 成為默認的腳本語言後,Python、Ruby 和 Go 等新興語言引起了許多人的注意,但 Perl 的功能並不弱。事實上,它比以往任何時候都要好,而且前途光明。

下次你想找一種更靈活的語言,並有簡單的交付方式時,不妨試試 Perl,並下載這個速查表

via: https://opensource.com/article/22/2/perl-cheat-sheet

作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國