-2

我想将列号限制为 45 个字符。我正在使用 Text::Wrap:wrap 如下。

$Text::Wrap::columns = 44;
print FOUT wrap('','' ,<FIN>);

它将所有列制作为 44 个字符而不会损坏工作。但它在开始时减少了一些行的空间。

例如:使用 之前wrap(),如果一行开头有 5 个空格,使用 之后wrap(),空格变为 3。

任何人都可以帮我解决这个问题。

4

2 回答 2

1

我在 Text::Wrap 的 POD 文档中看到了这一点:

Text::Wrap::wrap()通过将其输入中的所有选项卡展开为空格来开始其工作。它所做的最后一件事是将空格重新转换为制表符。如果您不希望结果中出现选项卡,请设置$Text::Wrap::unexpand为 false 值。同样,如果您不想使用 8 个字符的制表位,请将其设置$Text::Wrap::tabstop为您想要的制表位的字符数。

这可以解释在行首删除制表符的空格。您需要尝试一下$Text::Wrap::tabstop$Text::Wrap::unexpand看看这是否能得到您想要的结果。

您可能想尝试Text::FormatText::Wrapper

于 2013-08-30T14:49:05.297 回答
0

如果我正确理解您的问题, 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;
于 2012-06-07T13:14:27.163 回答