Perl 5.36.0 中出現的實驗機能 `extra_paired_delimiters`
作者:gugod 發佈於: ,更新於: #perl看來應該是伴隨 Unicode 14.0 而一併出現的機能。
所謂的 paired delimiters 指的是像 ()
、[]
、{}
這種兩個一組的符號。可以配合 q
運算符來把字串括住,也就是所謂的「括號」。除了單引號 ''
雙引號 ""
,透過 q
運算符就可以使用各式各樣的半形字符(字碼在 127 以下的)來當括號。
say 'It\'s a beautiful day.';
say q(It's a beautiful day.); # 意義同上。或許比較好讀一些。
#=>
# It's a beautiful day.
# It's a beautiful day.
這種設計會出現的主要理由,是讓人便於在程式碼中定義各種內含括號的字串。普遍來說程式碼中的字串內容如果帶有符號,尤其是括號,就要以倒斜線字符 \
來「跳脫」。如果以單引號 '
來括,字串內的單引號就前就得加上跳脫字符 \
。
自 Perl v5.36.0 起,perldoc feature
內多了一段 extra_paired_delimiters
。看來是讓 Unicode TN39 內所定義的成對刮號都可以拿來當原始碼中的字串括號使用。但是,除了一般寫文章會用到的幾組全型括號 「」
、『』
、〖〗
之外,還有許多不太尋常的選項:
use v5.36;
use utf8;
use feature 'extra_paired_delimiters';
say q🔊電腦說:「你好,今天真是不錯。」🕪;
say q🖝怎麼這樣?🖜;
say q𝄆𝄞🎵這個字串𝄀𝄿不𝄿會自𝄀動反覆🎶𝄇 ;
#=>
# 電腦說:「你好,今天真是不錯。」
# 怎麼這樣?
# 𝄞🎵這個字串𝄀𝄿不𝄿會自𝄀動反覆🎶
可用來當左右括號的字符列表很長,在 perldoc feature 文件中有完整列出。
稍微翻了 perl5.git commit 記錄,看來有許多額外追加進去,而不在 Unicode TN39 列表內的符號。
但既然至少是包含了 Unicode TN39 這定義,可以想見未來或許會隨著 Unicode 本身的演進而演進。而這些括號字符的字碼幾乎全部都在 127 以上,也就是說如果不在源碼開頭加上 use utf8;
,其實也是無法真正拿那些字符出來用的。
粗略想起來,我真的很少需要在程式碼中寫很大量的字串。需要內嵌大量「滿是括號」的字串的機會更是很少。理論上最有可能發生的時機大概就是要在 Perl 程式碼中內嵌帶 Vue 變數的 HTML,而其內容還是中文小說的狀況。這麼狀況下 <>
, ""
, ''
, {}
, 「」
, 『』
說不定真的會同時出現在字串內。而讓人會想要使用 🖝🖜
來當括號......
總之,若能夠少寫一些跳脫用的倒斜線字符,就能讓易讀性向上提升一些,也可以減少在改字串內容時忘記要補上倒斜線的人爲疏失。雖然有點奇妙,但姑且就先記得有這一項選擇,看看有沒有那天會真的可以用上。
對於已經習慣使用輸入法來繕打各種全形括號的 CJK 使用者而言,或許更能善加利用這項機能吧。