2010-03-20 3 views
5

/usr/bin/env perl

use warnings; 
use strict; 

my $text = 'hello ' x 30; 

printf "%-20s : %s\n", 'very important text', $text; 

La sortie de ce script ressemble plus ore moins comme ceci:Comment créer une sortie en colonnes dans Perl?

very important text  : hello hello hello hello 
hello hello hello hello hello hello hello hello 
hello hello hello hello hello hello hello hello 
... 

Mais je voudrais une sortie comme ceci:

very important text: hello hello hello hello 
        hello hello hello hello 
        hello hello hello hello 
        ... 

J'ai oublié de mentionner: Le texte devrait avoir une extrémité ouverte dans le sens où l'extrémité droite des lignes de texte devrait correspondre à la taille du terminal.

Comment est-ce que je pourrais changer mon script pour atteindre mon but?

+2

S'il vous plaît expliquer clairement – muruga

+0

Parlez-vous des paragraphes pleinement justifiées? Cela va être à la fois dur et laid sur un terminal. Je suppose que vous n'avez jamais travaillé avec WordStar sur CPM. –

Répondre

5

Vous pouvez utiliser Text::Wrap:

use strict; 
use Text::Wrap; 

my $text = "hello " x 30; 
my $init = ' ' x 20; 
$Text::Wrap::columns = 80; 

print wrap ('', $init, 'very important text : ' . $text); 
+0

L'extrémité droite des lignes de texte doit correspondre à la largeur du terminal. Avec Text :: Wrap j'ai une largeur fixe de colonnes. –

+1

@sid_com: Vous pouvez utiliser Term :: Size (http://search.cpan.org/~timpx/Term-Size-0.2/Size.pm) pour obtenir la largeur du terminal en colonnes et définir $ Text :: Wrap: : colonnes en conséquence. –

+0

a accepté cette réponse en liaison avec le commentaire de Dave Sherohman. –

0

Bien que je ne sois pas sûr de votre question du format de sortie, je peux vous dire que la clé de la sortie en langage Perl est d'utiliser des formats.

Une introduction sur la façon de les utiliser pour obtenir à peu près n'importe quel format de sortie que vous souhaitez est Perl format primer.

+0

J'ai jeté un coup d'oeil à Perl6 :: Form mais s'il vous plaît voir mon commentaire à karthi-27 –

3

Essayez ceci,

use strict; 
use warnings; 

my $text = 'hello ' x 30; 

$text=~s/((\b.+?\b){8})/$1\n      /gs; 
printf "%-20s : %s\n", 'very important text', $text; 
+0

J'ai oublié de mentionner: le texte devrait avoir une extrémité ouverte dans le sens où la droite des lignes de texte devrait correspondre à la taille du terminal. –

0
#!/usr/bin/env perl 
use warnings; 
use strict; 
use 5.010; 
use Text::Wrap; 
use Term::Size; 

my $text = 'hello ' x 30; 
my $init = ' ' x 22; 
my($columns, $rows) = Term::Size::chars *STDOUT{IO}; 
$Text::Wrap::columns = $columns; 

say wrap ('', $init, 'very important text : ' . $text); 
Questions connexes