看板 Perl 關於我們 聯絡資訊
※ 引述《ForeverT (全家好神)》之銘言: : 感謝 : 好用的一招 學起來 : 但字數是未知的 : 格式是固定的 : 長字串可能會被削去 : 短字串可能空格太多 : 又該如何解呢? : 希望能依據最長字串做向右或向左對齊 : 謝謝 #!/usr/bin/perl use warnings; use strict; use List::Util qw(max); my @array1 = (10000, 233, 899983, 4908); my @array2 = ( 10, 32323, 73, 343238); my @array3 = ( 1, 233, 3, 88); sub maxlen { map { max map { length } @$_ } @_ } sub center { my ($str, $width) = @_; my $len = length($str); return $str if $len > $width; my $d = $width - $len; my $s = ' ' x int($d/2); return $d % 2 == 0 ? "$s$str$s" : "$s $str$s"; } my @maxlen = maxlen \@array1, \@array2, \@array3; for my $i (0 .. $#array1) { printf "%*s %s %*s\n", -$maxlen[0], $array1[$i], center($array2[$i], $maxlen[1]), $maxlen[2], $array3[$i]; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.180.138
cutecpu:想問一下 f 大,有什麼情況下 return $str if $len > $wi 03/31 11:13
cutecpu:dth; 這行會成立 ? 03/31 11:14
ForeverT:謝謝 研究研究 03/31 14:18
frank1983:比如說 center("12345", 3),不過在這個程式中並不會發 04/01 01:19
frank1983:生 $str 的長度比 $width 還要長的情況,只是保險起見 04/01 01:22
cutecpu:謝謝 f 大解說 ^_^ 04/01 12:46