你喜欢哪个版本?
#!/usr/bin/env perl
use warnings;
use strict;
use 5.010;
my $p = 7; # 33
my $prompt = ' : ';
my $key = 'very important text';
my $value = 'Hello, World!';
my $length = length $key . $prompt;
$p -= $length;
备选办法1:
$key = $key . ' ' x $p . $prompt;
备选方案二:
一个二个一个一个
4条答案
按热度按时间brccelvz1#
我宁愿
或
而不是这些奇怪的东西。
从
sprintf
documentation:标志字符
'-'
转换后的值将在字段边界上向左调整。(默认值为右对齐。)转换后的值在右边填充空白,而不是在左边填充空白或零。如果'-'
和0
都给定,则'-'
将覆盖0
。字段宽度
可选的十进制数字字符串(第一个数字不为零),指定最小字段宽度。如果转换后的值的字符数少于字段宽度,则将在其左侧填充空格(或右,如果已给出左调整标志),可以写
'*'
或'*m$'
来代替十进制数字串(对于某个十进制整数m
),指定分别在下一个参数或第m个参数中给出字段宽度,其类型必须为int。负字段宽度被视为'-'
标志,后跟正字段宽度。在任何情况下,不存在的或小的字段宽度都不会导致字段截断;如果转换结果比字段宽度宽,则扩展字段以包含转换结果。zsbz8rwp2#
我不喜欢选项2,因为它引入了不必要的特殊情况。
我将重构prompt后缀的结构:
mwkjh3gx3#
可以说我是守旧派,但我会使用printf()或sprintf():
这个左对齐字符串$key为33个空格,添加$prompt和$value以及一个换行符。如果我想动态计算第一部分的长度:
由于这是一行,而不是问题的4(备选案文1)或6(备选案文2),因此在简洁程度上得分较高。
kiz8lqtg4#
我看起来有点奇怪,但这是工作(直到现在):