如何"填充"可变长度字符串以使对齐的最后一列

qdo*_*dog 11 perl

我有以下格式的输入:


09:08:11        XXXXXXXXXXXXX  1.1.1.1          
09:09:03        YYYYYYYY  2.2.2.2         
09:12:37        ZZZZ   3.3.3.3
Run Code Online (Sandbox Code Playgroud)

我可以使用正则表达式轻松提取这些个人字段/(\S+)\s+(\S+)\s+(\S+)\s+/.我叫他们$time,$name$number.我的问题是我想显示这个以便$number完美对齐.因为它$name可以是任何长度,对此最好的解决方案是什么?

我希望输出看起来像这样.请注意,我必须使用点来对齐最后一个字段,因为我无法使用空格键来执行此操作,不确定原因.安美居.


09:08:11        XXXXXXXXXXXXX    1.1.1.1          
09:09:03        YYYYYYYY         2.2.2.2         
09:12:37        ZZZZ             3.3.3.3
Run Code Online (Sandbox Code Playgroud)

我想把它$name放到一个数组中.然后使用函数找到字符数最长的函数.最后,我会填写较短的名称以匹配最长的名称.有没有更好,更有效的方法来做到这一点?

Jim*_*son 21

对于格式化,请尝试使用sprintf函数,如

$line = sprintf "%-12s %-20s %-s\n", $time, $name, $number;
Run Code Online (Sandbox Code Playgroud)

(减号表示左对齐)


Ash*_*win 5

这是这里有人给的:

my($name, $telephone, $stime);

format Infos =
@<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<
$name,             $telephone,         $stime
.

$~ = 'Infos';

($name, $telephone, $stime) = ('Name:', 'Telephone:', 'Start Time:');
write;

($name, $telephone, $stime) = ('Mike Bax', 'tel-41596', 'Fri 8/22 13:31');
write;
Run Code Online (Sandbox Code Playgroud)

您可以更改变量名称,它应该适合您。