为什么当我执行map{printf "%4s\n",File::Spec->rel2abs($_)}glob '*';
或print map{sprintf "%4s\n",File::Spec->rel2abs($_)}glob '*';
时,在字符串的左侧输出4个空格字符?...
/var/www/html/Physics/Electronics/file1.txt
/var/www/html/Physics/Electronics/file2.txt
/var/www/html/Physics/Electronics/file3.txt
/var/www/html/Physics/Electronics/file4.txt
似乎我必须做map{print "\x{20}\x{20}\x{20}\x{20}",File::Spec->rel2abs($_),"\n"}glob '*';
才能在字符串的左侧输出4个空格字符...
/var/www/html/Physics/Electronics/file1.txt
/var/www/html/Physics/Electronics/file2.txt
/var/www/html/Physics/Electronics/file3.txt
/var/www/html/Physics/Electronics/file4.txt
答案 0 :(得分:5)
%4s
(或%-4s
)并不意味着“向此字符串添加4个空格”。这意味着“输出此字符串的最小字段宽度为4”,即,少于4个字符的字符串将用空格填充。另请参见perldoc -f sprintf
。
如果您想始终在开头添加4个空格,只需这样做
for my $file (glob '*') {
print " ", File::Spec->rel2abs($file), "\n";
}
或
for my $file (glob '*') {
print " " x 4, File::Spec->rel2abs($file), "\n";
}
我在这里使用for
是因为它在空白上下文中比map
更清晰,更有效(您不收集结果列表,而只想输出一些内容)。另一方面,如果您只想转换列表,则
my @indented = map { " " x 4 . File::Spec->rel2abs($_) } glob '*';
会工作的。