Что я должен использовать вместо printf в Perl?

Viewflow - это тонкий слой рабочего процесса, который извлекает логику потока из представлений. Логика представления, которая сохраняет различные данные, остается нетронутой.

Чтобы написать собственный вид, вам просто нужно добавить FlowMixin. Его можно использовать как с generic.CreateView, так и с generic.UpdateView

Django CBV может выглядеть сложно, в этом случае вы можете использовать простое функциональное представление, просто пометив его декоратором @flow_view. Когда задача завершена, представление должно вызвать request.activation.done()

Вот несколько примеров пользовательских представлений, которые вы можете проверить для ссылки https://github.com/viewflow/cookbook/blob/master/ custom_views / демо / / views.py биохимический анализ крови # L54

7
задан Nikolai Prokoschenko 17 April 2009 в 11:49
поделиться

8 ответов

Большинство шаблонных модулей в CPAN будут наверное делай что хочешь. Вот пример использования Template Toolkit ...

use Template;
my $tt = Template->new;

$tt->process( \"Outputting [% num %] numbers\n", { num => 100 } );


И вы можете имитировать нужный вам пример с чем-то вроде этого ...

sub printX {
    use Template;
    my $tt = Template->new( START_TAG => '{', END_TAG => '}' );
    $tt->process( \( $_[0] . "\n" ), $_[1] );
}

и вы получите ...

printX 'Outputting {num} numbers' => { num => 100 };
12
ответ дан 6 December 2019 в 05:04
поделиться

Как насчет просто:

 print "Outputting $n numbers";

Это очень Перли. Если вам не нужно какое-либо необычное форматирование, то, безусловно, лучше использовать интерполяцию строк.

14
ответ дан 6 December 2019 в 05:04
поделиться

Встроенная функция print очень удобна для большинства ситуаций. Помимо интерполяции переменных:

print "Outputting $n numbers";    # These two lines
print "Outputting ${n} numbers";  # are equivalent

Помните, что print может принимать несколько аргументов, поэтому нет необходимости сначала объединять их в одну строку, если вам нужно вывести результат вызова подпрограммы:

print "Output data: ", Dumper($data);

Однако для вывода чисел, отличных от простых целых, вам, вероятно, понадобится удобство форматирования printf. Вывести другие типы данных легко с помощью функции print .

Вы можете использовать join для удобного вывода массивов:

print join ', ', @array;

И объединить с map и клавиши для вывода хэшей:

print join ', ', map {"$_ : $hash{$_}"} keys %hash;

Используйте оператор qq , если вы хотите выводить кавычки вокруг данных:

print join ', ', map {qq("$_" : "$hash{$_}"}) keys %hash;
5
ответ дан 6 December 2019 в 05:04
поделиться

Кажется, вы хотите использовать другой способ анализа строк. Я бы посоветовал вам не делать этого. Единственный, кто видит синтаксис с% d в нем, является разработчиком, и он точно поймет, что имеется в виду. Синтаксис printf является мощным из-за таких опций, как padding, decimals и т. Д.

Я думаю, вы хотите использовать больше метод замены. Это неправильно - делать s / {num} / $ n /.

4
ответ дан 6 December 2019 в 05:04
поделиться

Если вы хотите облегчить перевод, вам следует рассмотреть возможность использования одного из доступных модулей CPAN L10n / i18n. В частности, хороший обзор того, почему ваш подход в конечном итоге потерпит неудачу, написан как часть Local :: Maketext docs .

Еще один замечательный модуль, который прекрасно сочетается с Locale :: Maketext, это Locale :: Maketext :: Lexicon . Это позволяет вам использовать более стандартные форматы локализации, такие как файлы .po / .mo gettext, которые имеют инструменты GUI, чтобы помочь переводчикам работать со всем текстом, который требуется перевести. Locale :: Maketext :: Lexicon также поставляется со вспомогательным скриптом (xgettext.pl), который помогает поддерживать ваши файлы локализации в актуальном состоянии с вашими шаблонами или модулями, которые имеют текст, который необходимо перевести. Я'

5
ответ дан 6 December 2019 в 05:04
поделиться

В свете вашего Комментарий о том, чтобы быть для переводчиков Я предлагаю написать Perl-скрипт, который удаляет все printf () и табулирует их в более удобной для переводчиков форме.

Примерно так:

while(<>)
{
    #regex for striping printf

    #print in tabulated form
}

Если вы распечатаете строку Кроме того, вы можете легко написать другую программу для замены переведенного текста.

Это решение не займет у вас больше времени, чем перефакторинг от printf () и его можно будет использовать повторно.


Я бы определенно придерживался printf () , это стандарт для многих языков.

Это почти стало стандартом для вывода строки.

1
ответ дан 6 December 2019 в 05:04
поделиться

Generally answer from Draegtun is great, but if you'd need something smaller (i.e. less memory), and not as powerful you can easily do it using this function:

sub printX {
    my ( $format, $vars ) = @_;

    my @sorted_keys = sort { length($b) <=> length($a) } keys %{ $vars };
    my $re = join '|', map { "\Q$_\E" } @sorted_keys;

    $format =~ s/ \{ \s* ($re) \s* \} /$vars->{$1}/xg;

    print $format;
}
1
ответ дан 6 December 2019 в 05:04
поделиться

ну, у perl есть функция printf ... подождите, вы хотите что-то вроде форматирования строки python с помощью dict ?

 >>> print '%(key)s' % {'key': 'value'}
 value

ммм, я не знаю, что-то подобное существует в perl ... по крайней мере, не это "легко" ... возможно Текст :: Sprintf :: Named может быть вашим другом

-2
ответ дан 6 December 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: