将 perl 中的字符串截断为带有尾随省略号的子字符串

Mar*_*s88 1 perl substring

如果字符串长于设定值,我正在尝试使用 perl 截断选择输入选项中的字符串,但我无法使其正常工作。

    my $value = defined $option->{value} ? $option->{value} : '';
    my $maxValueLength = 50;

    if ($value.length > $maxValueLength) {
        $value = substr $value, 0, $maxValueLength + '...';
    }
Run Code Online (Sandbox Code Playgroud)

zdi*_*dim 5

另一种选择是正则表达式

$string =~ s/.{$maxLength}\K.*/.../;
Run Code Online (Sandbox Code Playgroud)

它匹配.给定次数的任何字符 ( ) ( {N}, 这里$maxLength), 中的第一个$maxLength字符是什么$string;然后\K让它“忘记”之前的所有匹配项,以便以后不会被替换。然后匹配的字符串的其余部分被替换为...

在perlre环视断言\K

这确实为一个简单的任务启动了正则表达式引擎,但它不需要任何条件——如果字符串短于最大长度,则正则表达式将不匹配并且没有任何反应。