我想将列号限制为 45 个字符。我正在使用 Text::Wrap:wrap 如下。
$Text::Wrap::columns = 44;
print FOUT wrap('','' ,<FIN>);
它将所有列制作为 44 个字符而不会损坏工作。但它在开始时减少了一些行的空间。
例如:使用 之前wrap()
,如果一行开头有 5 个空格,使用 之后wrap()
,空格变为 3。
任何人都可以帮我解决这个问题。
我想将列号限制为 45 个字符。我正在使用 Text::Wrap:wrap 如下。
$Text::Wrap::columns = 44;
print FOUT wrap('','' ,<FIN>);
它将所有列制作为 44 个字符而不会损坏工作。但它在开始时减少了一些行的空间。
例如:使用 之前wrap()
,如果一行开头有 5 个空格,使用 之后wrap()
,空格变为 3。
任何人都可以帮我解决这个问题。
我在 Text::Wrap 的 POD 文档中看到了这一点:
Text::Wrap::wrap()
通过将其输入中的所有选项卡展开为空格来开始其工作。它所做的最后一件事是将空格重新转换为制表符。如果您不希望结果中出现选项卡,请设置$Text::Wrap::unexpand
为 false 值。同样,如果您不想使用 8 个字符的制表位,请将其设置$Text::Wrap::tabstop
为您想要的制表位的字符数。
这可以解释在行首删除制表符的空格。您需要尝试一下$Text::Wrap::tabstop
,$Text::Wrap::unexpand
看看这是否能得到您想要的结果。
您可能想尝试Text::Format或Text::Wrapper。
如果我正确理解您的问题, Text::Wrap 将(并非不合理地)删除字符串前面的额外空格。你不希望它发生
这是用下划线替换行前空格的解决方案,通过 wrap() 运行它,然后删除下划线
use Text::Wrap;
#test data, note the 5 spaces at the start of some lines
for (1..4) { push @a," hello I love you", "Won't you tell me your name? ";}
push @a,"She's walking down the street"," Blind to every eye she meets","Do you think you\'ll be the guy", "To make the queen of the angels sigh?";
#make it longer with repeating
push @b,@a,@a,@a;
$Text::Wrap::columns = 44;
#show bad behaviour
print "VERSION 1\n";
print wrap("","",@b);
#fixup strings with leading underscores
map {s/^\s+/"_" x length(\1)/e} @b;
@z=wrap("","",@b);
#remove _
map{s/_+/" " x length(\1)/ge} @z;
print "\nVERSION 2\n";
print @z;