あなたは参照について混乱しているようです。たぶん、あなたは次のCポインタシナリオを考えていると思います。
char text[] = "This is a test xx\n";
char *cursor = text + 15;
*cursor = ' 1';
$id
の内容をに補間するmy $x = "Test string $id"
と、の値を変更することで、補間された文字列の値を変更できるという印象をどのような思考プロセスがもたらすのかわかりません$id
。
私が言ったように、あなたは本当に混乱しています。
ここで、サブルーチンのどこかで出力フォーマットをサブルーチンに埋め込まずに出力をフォーマットできるようにしたい場合は、次のように、引数の1つとしてメッセージフォーマッターをサブルーチンに渡すことができます。
my $formatter = sub { sprintf 'The error code is %d', $_[0] };
forbnicate([qw(this that and the other)], $formatter);
sub frobnicate {
my $args = shift;
my $formatter = shift;
# ...
for my $i (0 .. 9) {
print $formatter->($i), "\n";
}
return;
}
これは面倒になるので、基本的にフォーマッターのパッケージを用意し、潜水艦に必要なフォーマッターを使用させることができます。
package My::Formatters;
sub error_code {
my $class = shift;
return sprintf 'The error code is %d', $_[0];
}
メインスクリプト:
use My::Formatters;
for my $i (0 .. 9) {
My::Formatters->error_code($i);
}