我的目标是每次将值分配给"受监视"变量时,我想:
在日志文件中注册该更改或将其显示在状态区域中
保持代码整洁.
一个真实世界的例子是当光标在文档周围移动时,状态栏中的编辑器中的光标位置会发生变化.
我理解,目标1.很容易满足以下片段.
$a = 52; print LOG "\$a = [$a]\n";
我的偏好是代码看起来像这样:
$a = 52;
在其他地方(一个物体,一个过程,重载的操作员),神奇地发生了打印.
您可以通过将标量变量绑定到处理日志记录的包来完成此操作.绑定允许您定义被调用的子类,以便实际存储,获取等值.
见perltie和Tie :: Scalar.
这是一个工作示例:
#!/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";
输出:
LOG: Storing 100 in LogScalar=SCALAR(0x1ff0890) v = 100