2010-03-20 7 views
5

/usr/bin/env perl

use warnings; 
use strict; 

my $text = 'hello ' x 30; 

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

La salida de este script es más mineral menos así:!¿Cómo puedo crear una salida columnar en Perl?

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

pero me gustaría una salida como esta:

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

I olvidó mencionar: el texto debe tener un extremo abierto en el sentido de que el extremo derecho de las líneas de texto debe alinearse correspondiente al tamaño de la terminal.

¿Cómo podría cambiar mi script para alcanzar mi meta?

+2

favor explicar claramente – muruga

+0

¿Estás hablando de los párrafos plenamente justificados? Eso va a ser duro y feo en una terminal. Supongo que nunca trabajó con WordStar en CPM. –

Respuesta

5

Puede utilizar 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

El extremo derecho de las líneas de texto debe alinearse según el ancho del terminal. Con Text :: Wrap tengo un ancho fijo de columnas. –

+1

@sid_com: puede usar Term :: Size (http://search.cpan.org/~timpx/Term-Size-0.2/Size.pm) para obtener el ancho de la terminal en columnas y establecer $ Text :: Wrap: : columnas en consecuencia. –

+0

aceptado esta respuesta en coordinación con el comentario de Dave Sherohman. –

0

Aunque no estoy seguro de su pregunta con precisión qué formato desea que su producción en, te puedo decir que la clave para la producción bastante en el lenguaje Perl es utilizar formatos.

Una guía sobre cómo usarlos para lograr casi cualquier formato de salida que le gustaría es Perl format primer.

+0

He echado un vistazo a Perl6 :: Form pero vea mi comentario a karthi-27 –

3

Prueba de esto,

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

Olvidé mencionar: el texto debe tener un extremo abierto en el sentido de que el extremo derecho de las líneas de texto debe alinearse correspondiente a el tamaño de la 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); 
Cuestiones relacionadas