Perl 最佳實踐 節選 12

2021-08-26 19:51:25 字數 1734 閱讀 9729

正規表示式就是子程式。就是文字匹配子程式。

一定要用

/x標記。

一定要用

/m標記。

以\a和

\z作為字串邊界錨點(

anchor

)。

#刪除前後空白……

$text=~ s{}gxm;

使用

\z表示「字串末尾」,不要用

\z。

perl提供\z標示符號的變形版本:\z。但是,小寫\z是指「匹配字串末尾」,而大寫\z是指「匹配可有可無的換行字元,然後是字串末尾」。

總是使用

/s標記。

考慮強制使用

regexp::autoflags

模組。

為了我們在每個正則後面少輸入「/xms」,我們可以使用:

useregexp::autoflags;

優先使用

m,少在多行正規表示式中用/…

/。

除了/…

/或m以外,不要用其他定界符。

最好使用字元類,不用轉義的元字元(

metacharacter

)。

最好使用具名字元,不用轉義的元字元。

例如:if($escape_seq =~ /\177 \006 \030 z/xms) \n \n z/xms) \p* /xms;

注perl5.8以上版本才支援unicode。

考慮匹配任意空白,而不是特定空白字元。

$config_line=~ mxms

當匹配「盡可能多」時,一定要制定。

#格式為:% & ……

if($source =~ m/\a ([^%]*) % ([^&]*) & (.*) /xms) );

my$res = execute($prog, );

else reverse sort keys %irregular_plural_of;

由較簡單的零件建立複雜的正規表示式。

# 建立正規表示式以匹配浮點數……

readonlymy $digits => qrxms;

readonlymy $sign => qrxms;

readonlymy $exponent => qrxms;

readonly my $number =>qrxms;

#稍後……

my($number, $sign, $digits, $exponent)

=$input =~ $number;

考慮使用

regexp::common

,不要自己寫正規表示式。

使用字元類,不要使用單一字元交替(

alternation

)。

if ($quotelike!~ mxms) xms;

# 離開命令有很多變形版本 ……

lastcommand if $cmd eq 『q』

|| $cmd eq『quit』

|| $cmd eq 『bye』;

Perl 最佳實踐 節選 06

使用 塊 if,不要使用字尾 if。例如,下面的就不好理解 sum measurement if defined measurement 其實,它等於 if defined measurement sum measurement 字尾 if要保留給流程控制語句。不要使用 unless for whi...

Perl 最佳實踐 節選 08

不要在 sort 中重新計算排序鍵。使用 reverse 逆轉列表。使用 scalar reverse 逆轉標量。使用 unpack 取出固定寬度的字段。使用 split 取出簡單的可變寬度的字段。使用 text csv xs 以取出複雜的可變寬度的字段。避免對字串使用 eval 考慮以 sort ...

Perl 最佳實踐 節選 10

不要使用未修飾字檔案控制代碼 bareword filehandle 使用間接檔案控制代碼。如果你要使用包檔案控制代碼,就先將其局域化。使用 io file 模組或三自變數形式的 open 對檔案做 open close print 時一定要檢查結果。顯式關閉檔案控制代碼,而且要盡可能快一點。使用 ...