Was sollte ich anstelle von printf in Perl verwenden?

7

Ich brauche einen String-Ersatz in Perl, um die Übersetzung zu vereinfachen, d. h. viele ersetzen

%Vor%

von etwas wie

%Vor%

Allerdings möchte ich printf durch etwas leichteres parsen für Menschen ersetzen:

%Vor%

oder generell etwas mehr Perly.

Können Sie etwas (von CPAN oder nicht), das Sie mögen und verwenden, empfehlen?

    
Nikolai Prokoschenko 17.04.2009, 11:49
quelle

8 Antworten

12

Die meisten Templating-Module auf CPAN werden wahrscheinlich tun, was Sie wollen. Hier ist ein Beispiel mit Template Toolkit ...

%Vor%


Und Sie können Ihr benötigtes Beispiel mit etwas Ähnlichem nachahmen ...

%Vor%

und du hast ...

%Vor%     
draegtun 17.04.2009, 12:42
quelle
14

Was ist mit einfach:

%Vor%

Das ist sehr Perly. Wenn Sie keine aufwendige Formatierung benötigen, ist die String-Interpolation definitiv der richtige Weg.

    
Greg Hewgill 17.04.2009 12:00
quelle
5

Die eingebaute print ist für die meisten Situationen sehr praktisch. Neben variabler Interpolation:

%Vor%

Denken Sie daran, dass print mehrere Argumente annehmen kann, so dass es nicht notwendig ist, sie zuerst zu einer einzigen Zeichenfolge zu verketten, wenn Sie das Ergebnis eines Unterprogrammaufrufs ausdrucken müssen:

%Vor%

Um jedoch andere Zahlen als einfache Ganzzahlen auszugeben, möchten Sie wahrscheinlich die Formatierung von printf vereinfachen. Die Ausgabe anderer Datentypen ist jedoch einfach mit print möglich.

Sie können join verwenden, um Arrays bequem auszugeben:

%Vor%

Und kombinieren Sie mit map und keys , um Hashes auszugeben:

%Vor%

Verwenden Sie den Operator qq , wenn Sie Anführungszeichen um die Daten ausgeben möchten:

%Vor%     
nohat 17.04.2009 16:17
quelle
5

Wenn Sie Übersetzungen vereinfachen möchten, sollten Sie eines der verfügbaren L10n / i18n CPAN-Module in Erwägung ziehen. Genauer gesagt, ein guter Überblick darüber, warum Ihr Ansatz zu kurz kommt, ist als Teil des Locals geschrieben: Maketext-Dokumente .

Ein weiteres großartiges Modul, das gut zu Locale :: Maketext passt, ist Locale :: Maketext :: Lexicon . Auf diese Weise können Sie mehr standardmäßige Lokalisierungsformate wie die .po / .mo-Dateien von gettext verwenden, die über GUI-Tools verfügen, die den Übersetzern dabei helfen, den gesamten zu übersetzenden Text zu bearbeiten. Locale :: Maketext :: Lexicon enthält außerdem ein Hilfsskript (xgettext.pl), mit dem Sie Ihre Lokalisierungsdateien mit Ihren Vorlagen oder Modulen auf dem neuesten Stand halten können, die Text enthalten, der übersetzt werden muss. Ich hatte in der Vergangenheit sehr gute Ergebnisse mit dieser Art von Setup.

    
Brian Phillips 17.04.2009 16:38
quelle
4

Es scheint, dass Sie eine andere Art der String-Analyse haben möchten. Ich würde dir raten, das nicht zu tun. Der einzige, der die Syntax mit dem% d darin sieht, ist der Entwickler und er wird genau verstehen, was gemeint ist. Die printf-Syntax ist aufgrund der Optionen wie Padding, Dezimalzahlen usw. sehr mächtig.

Ich denke, Sie möchten mehr eine Ersetzungsmethode verwenden. Es ist s / {num} / $ n /.

    
Peter Smit 17.04.2009 11:53
quelle
1

Angesichts Ihres Kommentars über das Sein für Übersetzer empfehle ich, ein Perl-Skript zu schreiben, das alle printf() streift und sie in einer leichter übersetzerfreundlichen Weise tabelliert.

In etwa so:

%Vor%

Wenn Sie auch die Zeilennummer ausdrucken, können Sie einfach ein anderes Programm schreiben, um den übersetzten Text zu ersetzen.

Diese Lösung würde Sie nicht länger brauchen, als von printf() neu zu faktorisieren und es ist wiederverwendbar.

Ich würde definitiv bei printf() bleiben, das ist Standard in vielen Sprachen.

Es ist fast ein Standard für die String-Ausgabe geworden. Wie i ist für for loops.

    
rjstelling 17.04.2009 11:59
quelle
1

Im Allgemeinen ist die Antwort von Draegtun großartig, aber wenn Sie etwas kleiner (d. h. weniger Speicher) benötigen und nicht so leistungsstark, können Sie dies leicht mit dieser Funktion tun:

%Vor%     
user80168 17.04.2009 17:22
quelle
-2

Nun, Perl hat printf Funktion ... Warten Sie, möchten Sie etwas wie python String-Formatierung mit dict ?

%Vor%

mmm, ich weiß nicht, dass sowas in Perl existiert ... zumindest nicht so "einfach" ... vielleicht Text :: Sprintf :: Benannt kann sei dein Freund

    
ZeD 17.04.2009 12:01
quelle

Tags und Links