如何在perl中分配监视变量来打印消息?

Tai*_*aul 1 perl

我的目标是每次将值分配给"受监视"变量时,我想:

  1. 在日志文件中注册该更改或将其显示在状态区域中
  2. 保持代码整洁.

一个真实世界的例子是当光标在文档周​​围移动时,状态栏中的编辑器中的光标位置会发生变化.

我理解,目标1.很容易满足以下片段.

$a = 52;
print LOG "\$a = [$a]\n";
Run Code Online (Sandbox Code Playgroud)

我的偏好是代码看起来像这样:

$a = 52;
Run Code Online (Sandbox Code Playgroud)

在其他地方(一个物体,一个过程,重载的操作员),神奇地发生了打印.

har*_*mic 5

您可以通过将标量变量绑定到处理日志记录的包来完成此操作.绑定允许您定义被调用的子类,以便实际存储,获取等值.

perltieTie :: 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";
Run Code Online (Sandbox Code Playgroud)

输出:

LOG: Storing 100 in LogScalar=SCALAR(0x1ff0890)
v = 100
Run Code Online (Sandbox Code Playgroud)