8.4 置換

置換是指先進行樣式比對,若有相符的地方,則將相符之處,置換成指定的字串。

置換的語法如下:


s/樣式/欲置換的字串/

可加上修飾子:e i m o s x g

i m o s x g 意思同 8.3 比對中的修飾子

e 代表將欲置換的字串視為一運算式

s/樣式/欲置換的字串/修飾子

用例 1:


# 將 $line 中的 < 符號,換成 &lt;
$line =~ s/</&lt;/;

用例 2:修飾子 i,不計大小寫


# 將 $text 中的 H1 或 h1 換成 H3
$text =~ s/H1/H3/i;

用例 3:使用記憶功能


$text =~ s/(\w+)\@(.+)/帳號:$1 主機名稱:$2/;

用例 4:刪除


$str = "I want to go to San Francico. I want to!";

$str =~ s/San//;  # 將第一個比對到的 San 字串置換掉

print $str, "\n\n";


再者:

$str = "I want to go to San Francico. I want to!";

$str =~ s/want//g;  # 將所有比對到的 want 字串置換掉

print $str, "\n\n";

用例 5:使用運算式


while(<DATA>) {
	s/7/3 + 5 * 2.1/eg;   # 因為有加 e 這個修飾子,所以 3 + 5 * 2.1 被視為運算式來執行
                          # 它會將找到的 7,用 3 + 5 * 2.1 的運算結果來取代
}

__DATA__
Marry 6
John 7
Kenny 8


輸出:

Marry 6
John 13.5
Kenny 8


以下是 CGI 程式中經常用的解碼程式片段:

$value=~ s/%(..)/pack("c",hex($1))/ge;

因為有加 e 這個修飾子,所以 pack("c",hex($1)) 被視為運算式來執行