您似乎对引用感到困惑。也许您正在考虑以下 C 指针场景:
char text[] = "This is a test xx\n";
char *cursor = text + 15;
*cursor = ' 1';
不知道是怎样的思考过程会带来这样的印象,一旦你将 的内容内$id
插进去my $x = "Test string $id"
,就可以通过改变 的值来改变内插字符串的值$id
。
正如我所说,你真的很困惑。
现在,如果您希望某个地方的子例程能够在不将输出格式嵌入子例程的情况下格式化某些输出,则可以将消息格式化程序作为参数之一传递给子例程,如下所示:
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);
}