perl中的tab扩展

use*_*275 4 perl tabs expansion

刚刚遇到在perl中进行tab扩展的代码,这里是代码:

1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
Run Code Online (Sandbox Code Playgroud)

我测试它是否正常工作,但我太了解了这一点的新手,有人想解释一下为什么它有效吗?或任何可以帮助我理解这一点的相关材料的指针将不胜感激,非常感谢.

rmm*_*mmh 8

Perl允许您在正则表达式中嵌入任意代码作为替换表达式.

$& 是最后一个模式匹配的字符串 - 在这种情况下是一些制表符.

$` 是最后一个模式匹配所匹配的字符串之前的字符串 - 这可以让您知道前一个文本有多长,这样您就可以正确地将事物与列对齐.

例如,运行此对字符串"Something\t\t\tsomething else",$&"\t\t\t"$`"Something".length($&)是3,因此最多需要24个空格,但是length($`)%8为1,所以为了使它每8个对齐一列,它会增加23个空格.