我的任务是将一些代码从 Perl 转换为 Python,我遇到了这段让我感到困惑的代码:
my $length = map $_, $root =~ /(.)/gs;
根据变量名和测试,我确定它获取字符串的长度,但这似乎是一种非常奇怪且难以理解的方法。为什么有人会使用它而不是 length($root)
或可怕的 $root =~ y///c
,如 this post 中所述,有什么理由吗? ?我想确保我没有错过一些基于我不知道的奇怪 Perl 行为的功能。
最佳答案
在列表上下文中,带有/g 修饰符的 m//运算符返回所有捕获的列表,在本例中是字符串中的每个字符。该映射是一个空操作,但在标量上下文中返回它生成的列表中的元素数,因此结果是字符串中的字符数。 m//运算符在标量上下文中的工作方式不同,因此需要这个中间步骤。一个类似的成语是:
my $length = () = $root =~ /(.)/gs;
这通常用于更复杂的匹配计数,因为 length函数非常合适并且效率更高。
关于regex - 我认为这段代码找到了字符串长度。这里到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976630/