-5
我有一個:
my ($pid) = ($_ =~ m/^.*\.(\d+)$/);
是什麼$ PID比賽嗎?
我有一個:
my ($pid) = ($_ =~ m/^.*\.(\d+)$/);
是什麼$ PID比賽嗎?
這裏你不是匹配$pid
,而是$_
到正則表達式 - m/^.*\.(\d+)$/
。 $pid
將存儲匹配$_
與正則表達式模式的結果。
這裏的正則表達式的解釋:
m/ # Delimiter
^ # Match beginning of string
.* # Match 0 or more repetition of any character except a newline
\. # Match a dot (.)
( # Start a capture group
\d+ # Match 1 or more repetition of digits.
) # Close capture group
$ # Match end of string
/
所以,如果在$_
值上面的圖案相匹配,$pid
將包含在第一捕獲組捕獲的價值,因爲你已經得到周圍$pid
一個括號,所以你的匹配操作將在列表上下文中評估。
你的匹配是有效的一樣:
# Note you can remove the `m`, if you use `/` as delimiter.
my ($pid) = /^.*\.(\d+)$/
還有一點要注意的是,因爲你正在做什麼用的開頭匹配的文本,你並不真的需要與之相匹配的。因此,您可以刪除.*
,但在這種情況下,您必須從中刪除插入符號(^)。所以,你現在正則表達式可以替換爲:
my $(pid) = /\.(\d+)$/
事實上,'$ pid'將包含第一個捕獲組,因爲周圍的'$ pid'的括號使這個名單分配,所以'=〜'在列表上下文中進行評估。 –
@llmari。哎呀。錯過了。 –
要選擇更多的尼特,上面的「句子」應該是「字符串」,並且'.'將匹配任何字符_except_換行符(因爲不使用'/ s'開關)。雖然這可能是一個錯誤。假設它是這樣的,整個事情可以寫得更緊湊,就像我的($ pid)=($ _ =〜/ \。(\ d +)$ /);',甚至只是'my($ pid)=/\(\ d +)$ /;'。此外,'$'也可以匹配字符串末尾換行符之前的位置。 –