我的目标是每次将值分配给"受监视"变量时,我想:
一个真实世界的例子是当光标在文档周围移动时,状态栏中的编辑器中的光标位置会发生变化.
我理解,目标1.很容易满足以下片段.
$a = 52;
print LOG "\$a = [$a]\n";
Run Code Online (Sandbox Code Playgroud)
我的偏好是代码看起来像这样:
$a = 52;
Run Code Online (Sandbox Code Playgroud)
在其他地方(一个物体,一个过程,重载的操作员),神奇地发生了打印.
您可以通过将标量变量绑定到处理日志记录的包来完成此操作.绑定允许您定义被调用的子类,以便实际存储,获取等值.
这是一个工作示例:
#!/usr/bin/perl
use strict;
use warnings;
package LogScalar;
use Tie::Scalar;
our @ISA=qw(Tie::StdScalar);
sub STORE {
my ($this, $value)=@_;
print "LOG: Storing $value in $this\n";
$this->SUPER::STORE($value)
}
package main;
my $v;
tie $v, 'LogScalar';
$v=100;
print "v = $v\n";
Run Code Online (Sandbox Code Playgroud)
输出:
LOG: Storing 100 in LogScalar=SCALAR(0x1ff0890)
v = 100
Run Code Online (Sandbox Code Playgroud)