7

翻訳を容易にするために、Perl で文字列置換を使用する必要があります。つまり、多くの文字列を置換します。

print "Outputting " . $n . " numbers";

のようなもので

printf ("Outputting %d numbers", $n);

ただし、次のように、 printf を人間にとって解析しやすいものに置き換えたいと思います。

printX ("Outputting {num} numbers", { num => $n });

または一般的にはもっとPerlyです。

あなたが気に入って使用しているものを (CPAN からのものであろうとなかろうと) お勧めできますか?

4

8 に答える 8

14

簡単にどうですか:

 print "Outputting $n numbers";

とてもパーリーです。派手な書式設定が必要ない場合は、文字列補間が間違いなく適しています。

于 2009-04-17T12:00:56.857 に答える
12

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 };
于 2009-04-17T12:42:21.673 に答える
5

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そして、と組み合わせてkeysハッシュを出力します。

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

データを引用符で囲む場合は、演算子を使用しqqます。

print join ', ', map {qq("$_" : "$hash{$_}"}) keys %hash;
于 2009-04-17T16:17:29.130 に答える
4

文字列を解析する別の方法が必要なようです。これをしないことをお勧めします。%d が含まれる構文を見ているのは開発者だけであり、開発者はその意味を正確に理解しています。printf 構文は、パディング、小数などのオプションがあるため強力です。

もっと置換メソッドを使いたいと思います。s/{num}/$n/ を実行するのは perlish です。

于 2009-04-17T11:53:58.187 に答える
1

printf()翻訳者向けであることについてのあなたのコメントに照らして、すべてを取り除き、より簡単で翻訳者に優しい方法でそれらを表にする perl スクリプトを書くことをお勧めします。

このようなもの:

while(<>)
{
    #regex for striping printf

    #print in tabulated form
}

行番号も出力すると、翻訳されたテキストを置き換える別のプログラムを簡単に作成できます。

このソリューションは、リファクタリングよりも長くかかることはなく、再printf()利用可能です。


私は間違いなく固執しprintf()ます、それは多くの言語で標準です。

文字列出力のほぼ標準になっています。同様iに forforループです。

于 2009-04-17T11:59:09.873 に答える
-2

まあ、perl にはprintf関数があります...待って、 python の dict による文字列フォーマットのようなものが欲しいですか?

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

うーん、私はそのようなものがperlに存在することを知りません...少なくともこの「簡単」ではない...多分Text::Sprintf::Namedはあなたの友達になることができます

于 2009-04-17T12:01:25.670 に答える