分類: Perl

精簡扼要的 Perl 課程講義(一):純量(Scalar)與陣列(Array)

Hello World!

#!/usr/bin/perl
# Hello World!
# Perl:1980年代誕生,直譯式語言。

print "Hello World!\n";

# 雙引號可內嵌特殊字元 如:
# \n     Newline
# \r     Carriage Return
# \t     Tab
# \f     Formfeed
# \b     Backspace
# \v     Vertical Tab
# \a     Bell
# \e     Escape
# \001   Octal ASCII value (here Ctrl-A)
# \x20   Hex ASCII value (here space)
# \cD    Control character (here Ctrl-D)
# \\     Backslash
# \"     Double Quote
# \l     Lowercase next letter
# \L     Lowercase all following letters until \E
# \u     Uppercase next letter
# \U     Uppercase all following letters until \E
# \E     Terminate \L or \U

print 'Hello World!\n';     # 單引號則只能內嵌 \\ \'

# 註一:在 Perl 中,函式可不用括號,以下兩行相等:
# print "Hello World!\n";
# print("Hello World!\n");
#
# 註二:在 Perl 中,"abc" 為三個字元,在 C 下,
# "abc" 為三個字元加上一 Null 字元。
# Perl 單行註解為 '#' 開頭
# 多行註解為
=pod 
此為註解
=cut

純量(Scalar)

# 純量 (scalar)

# (1) 純量:以 $ 開頭之變數,可儲存整數、浮點數、字串等

$val1 = 1;          # 1
$val2 = 0x123;          # 十六進位數值 123

# 為了使數字方便辨識,可加入 _ 分隔,
# 此變數數值為 23323930
$val3 = 23_323_930;

$val4 = -4.32e3;        # 科學記號
$str1 = "AB";           # 字串 "AB"
$name = "Bill";
print "Hello, $name\n";     # 雙引號可內嵌變數
print 'Hello, $name\n';     # 單引號不行

# (2) 數值與字串間的自動轉換

$a = "1";           # 字串
$b = "2";           # 字串

# Perl 會先將 $a 與 $b 自動轉為數值再相加,傳回數值
$c = $a + $b;

$d = "12abc34";

# Perl 會略過 $d 內非數字起頭到結尾的部份,
# 即 $d 被轉換為數值 12,再經計算 $e 為 24
$e = $d * 2;
$f = "abc";

# 若完全不是數字的字串,會被轉換成零,
# 因此結果 $f 被轉換為零,再經計算 $g 亦為 0
$g = $f * 2;

$a = 1;     # 數值

# Perl 會將 $a 轉為字串,做字串相加,$b 為 "string1"
$b = "string" . $a;
# 註:'.' 為字串相加運算子 

# (3) 在字串內安插變數

$val = 12;
$str1 = "I have $val dollars.";     # 安插變數
$str2 = 'I have ' . $val . ' dollars.'; # 字串相加

$str3 = "def";

# Perl 有時容易誤判變數名稱
$str4 = "abc$str3ghijk";

# 加入 {} 之後,可讓 Perl 正確判斷安插變數名稱
$str5 = "abc${str3}ghijk";

# (4) 特殊變數 $_

$_ = "Bill";
print;  # 若省略參數,預設為 $_,即 print $_;

# (5) chomp,chop 刪除最後一個(換行)字元

$str1 = "hello world.\n";

chomp($str1);   # 刪除最後一個換行字元,變成 "hello world."

chomp($str1);   # 無效果

chop($str1);    # 刪除最後一個字元,變成 "hello world"

chop($str1);    # 刪除最後一個字元,變成 "hello worl"

陣列(Array)

# 陣列(array)

# (1) 陣列:'@' 開頭,一連串的純量

@empty = ();    # 空陣列

# 一陣列內含兩元素 "Bill" "Mary"
@arr1 = ("Bill","Mary");

# @arr2 = ("Bill","Mary","John")
@arr2 = (@arr1,"John");

# @arr3 = ("John","Mary","Bill")
@arr3 = reverse @arr2;

# 按照 ASCII 碼排序,@arr4 = ("Bill","John","Mary")
@arr4 = sort @arr2;

print $arr1[1];         # "Mary"
print $#arr2;           # @arr2 最後一個元素的 index 即 2
print $arr2[$#arr2];        # @arr2 最後一個元素
print $arr2[-2];        # @arr2 倒數第二個元素

@arr4 = ("a","b","c","d","e","f");
@arr5 = @arr4[2..4];        # 取出 @arr4 第三到第五個元素

($a,$b) = ($b,$a);      # 交換 $a 與 $b


# (2) 純量與陣列語境

@array = ("a","b","c");     # 陣列
$scalar1 = @array;      # Perl 會傳回 @array 的長度
$scalar2 = sort @array;     # Perl 會傳回 undef
$scalar3 = reverse @array;  # Perl 會傳回 "cba"
$scalar4 = "@array";        # Perl 會傳回 "a b c"

$scalar = "a";          # 純量
($scalar);          # 陣列,元素個數為一


# (3) pop,push,shift,unshift 陣列處理

@arr = (0,1);
push(@arr,2);   # push 後,@arr = (0,1,2)
$a = pop(@arr); # pop 後,@arr = (0,1),$a = 2

@arr = (0,1);
unshift(@arr,2);    # unshift 後,@arr = (2,0,1)
$a = shift(@arr);   # shift 後,@arr = (0,1),$a = 2

# (4) split,join
$str = "It's my life."

# 以空白做分隔,將 $str 切成陣列,存入 @arr 
@arr = split / /,$str;

# 以 "-" 作分隔,將 @arr 連接成一個純量變數
$str2 = join "-",@arr;

繼續閱讀:Perl 程式設計教學

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

3 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago