Какие другие языки имеют функции и / или библиотеки, похожие на формат Perl? - PullRequest
6 голосов
/ 25 октября 2008

Я могу быть в меньшинстве, но мне очень нравится Форматы Perl . Мне особенно нравится, когда я могу обернуть длинный фрагмент текста в столбец (типа "~~ ^ <<<<<<<<<<<<<<<<"). Существуют ли другие языки программирования с похожими функциями или библиотеки, в которых реализованы аналогичные функции? Меня особенно интересуют любые библиотеки, которые реализуют нечто подобное для Ruby, но мне также любопытны любые другие варианты. </p>

Ответы [ 3 ]

13 голосов
/ 26 октября 2008

Мне кажется, что я вспомнил нечто подобное в Фортране, когда использовал его много лет назад (однако вполне возможно, что это была сторонняя библиотека).

Что касается других опций в Perl, взгляните на Perl6::Form.

Функция form заменяет format в Perl6. Дамиан Конвей из " Perl Best Practices " рекомендует использовать Perl6::Form с Perl5, ссылаясь на следующие проблемы с format ....

  • статически определено
  • полагаться на глобальные переменные для config & pkg vars для данных, которые они форматируют на
  • использует именованные файловые дескрипторы (только)
  • не рекурсивный или реентерабельный

Вот вариант Perl6::Form на примере Ruby Роберта Гэмбла ....

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;
7 голосов
/ 25 октября 2008

FormatR предоставляет Perl-подобные форматы для Ruby.

Вот пример из документации:

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
}

Который производит:

   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 голосов
/ 25 октября 2008

Есть функция Lisp (format ...) . Он поддерживает зацикливание, условные выражения и множество других забавных вещей.

например (скопировано сверху по ссылке):

(defparameter *english-list*
  "~{~#[~;~a~;~a and ~a~:;~@{~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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...