2008-10-25 13 views
6

Puedo ser una minoría aquí, pero disfruto muchísimo Perl's formats. I especialmente como ser capaz de envolver un trozo largo de texto dentro de una columna ("~~^< < < < < < < < < < < < < < < <" tipo de cosas). ¿Hay algún otro lenguaje de programación que tenga características similares o bibliotecas que implementen características similares? Estoy especialmente interesado en cualquier biblioteca que implemente algo similar para Ruby, pero también tengo curiosidad acerca de otras opciones.¿Qué otros idiomas tienen características y/o bibliotecas similares al formato de Perl?

+0

El enlace está (efectivamente) roto. –

Respuesta

7

FormatR proporciona formatos Perl-como por Ruby.

Aquí se muestra un ejemplo de la documentación:

require "formatr" 
include FormatR 

top_ex = <<DOT 
    Piggy Locations for @<< @#, @### 
        month, day, year 

Number: location    toe size 
------------------------------------------- 
DOT 

ex = <<TOD 
@)  @<<<<<<<<<<<<<<<<  @#.## 
num, location,    toe_size 
TOD 

body_fmt = Format.new (top_ex, ex) 

body_fmt.setPageLength(10) 
num = 1 

month = "Sep" 
day = 18 
year = 2001 
["Market", "Home", "Eating Roast Beef", "Having None", "On the way home"].each {|location| 
    toe_size = (num * 3.5) 
    body_fmt.printFormat(binding) 
    num += 1 
} 

que produce:

Piggy Locations for Sep 18, 2001 

Number: location    toe size 
------------------------------------------- 
1)  Market     3.50 
2)  Home      7.00 
3)  Eating Roast Beef  10.50 
4)  Having None    14.00 
5)  On the way home   17.50 
2

Está el Lisp (format ...) function. Es compatible con bucles, condicionales y un montón de otras cosas divertidas.

por ejemplo (copiado desde arriba link):

(defparameter *english-list* 
    "~{~#[~;~a~;~a and ~a~:;[email protected]{~a~#[~;, and ~:;, ~]~}~]~}") 

(format nil *english-list* '())  ;' ==> "" 
(format nil *english-list* '(1))  ;' ==> "1" 
(format nil *english-list* '(1 2)) ;' ==> "1 and 2" 
(format nil *english-list* '(1 2 3)) ;' ==> "1, 2, and 3" 
(format nil *english-list* '(1 2 3 4));' ==> "1, 2, 3, and 4" 
13

Me parece recordar algo similar en Fortran cuando lo usé hace muchos años (sin embargo, también puede tener ha sido una biblioteca de terceros).

En cuanto a otras opciones en Perl, eche un vistazo a Perl6::Form.

La función form reemplaza format en Perl6. Damian Conway en "Perl Best Practices" recomienda el uso de Perl6::Form con Perl5 citar las siguientes cuestiones con format ....

  • definido estáticamente
  • se basan en variables globales para config & paquete de datos que vars formato en
  • usos filehandles con nombre (solamente)
  • no recursivo o reentrante

Aquí es una Perl6::Form variación en el ejemplo de Ruby por Robert Gamble ....

use Perl6::Form; 

my ($month, $day, $year) = qw'Sep 18 2001'; 
my ($num, $numb, $location, $toe_size); 

for ("Market", "Home", "Eating Roast Beef", "Having None", "On the way home") { 
    push @$numb,  ++$num; 
    push @$location, $_; 
    push @$toe_size, $num * 3.5; 
} 

print form 
    ' Piggy Locations for {>>>}{>>}, {<<<<}', 
          $month, $day, $year , 
    "", 
    ' Number: location    toe size', 
    ' --------------------------------------', 
    '{]})  {[[[[[[[[[[[[[[[}  {].0} ', 
    $numb, $location,    $toe_size; 
Cuestiones relacionadas