-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::FormatまたはText::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 に答える