我有一个:
my ($pid) = ($_ =~ m/^.*\.(\d+)$/);
$ pid匹配什么?
答案 0 :(得分:5)
您在此处不是$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+)$/