次のサンプルコードを検討してください。sprintf型の引数をPerl関数に渡すことはできますか?
my $a = "test";
my $b = "stackoverflow";
test("%s - %s\n", $a, $b);
sub test {
my $error = sprintf(@_);
print $error;
}
これは、フォーマットされた文字列ではなく3を出力します。私がしようとしていることをすることさえ可能ですか?
次のサンプルコードを検討してください。sprintf型の引数をPerl関数に渡すことはできますか?
my $a = "test";
my $b = "stackoverflow";
test("%s - %s\n", $a, $b);
sub test {
my $error = sprintf(@_);
print $error;
}
これは、フォーマットされた文字列ではなく3を出力します。私がしようとしていることをすることさえ可能ですか?
VGEが示唆したように、それが問題を引き起こしているプロトタイプですが、あなたはshift
を使用する必要は、ないpop
:
sub test {
my $error = sprintf(shift, @_);
print $error;
}
sprintf
はスカラーコンテキストでは最初の引数を評価します。これが配列の場合は、配列の長さを取得します。
はperldocは のsprintf FORMAT、LIST
は、Cライブラリ関数のsprintfの通常のprintfの規則でフォーマットされた文字列を返しますと言います。詳細は以下を参照し、一般的な原則の説明についてはシステム上のsprintf(3)またはprintf(3)を参照してください。
私はこれを試したことはありませんが、@ _をポップアップしてフォーマットを取得し、残りのリストを渡すことができます。
私はsprintfの仕組みを知っていますが、私が働くことができないのは、書式を内部で行うためにフォーマットと要素をサブルーチンに渡しているときです。形式と要素を分けても違いはありませんが、sprintf(@ _)はそれと同じことをします。 – perlit
sprintf(シフト、@ _)が動作します –