如何在Raku中右对齐字符串并在超长时从左侧截断?
解决方案
核心思路是先截取字符串的最后N个字符(N为目标宽度),再进行右对齐格式化,既满足过长时左侧截断的需求,又避免了substr长度不足报错的问题——Raku的substr支持负索引,且会自动处理长度不足的场景:
代码实现
my $xs = (0..4).kv.map(-> $i, $x { ('a'..'z')[0..$i-1].join }); $xs.map({ sprintf '%3s', $_.substr(-3, 3) }).raku;
代码说明
$_.substr(-3, 3):从字符串末尾开始取最多3个字符。若字符串长度小于3,直接返回整个字符串(无报错);若长度超过3,自动截断左侧多余部分,保留最后3个字符。sprintf '%3s':将处理后的字符串格式化为宽度3的右对齐文本,不足部分用左侧空格填充。
运行后输出结果完全符合预期:
(" ", " a", " ab", "abc", "bcd").Seq
如果需要调整目标宽度,只需把代码中两处的3替换为对应数值即可。
内容的提问来源于stack exchange,提问作者menfon
相关产品推荐
相关产品推荐

