题
如果我有一个简单的绑定标量类,该类每次读取时都会递增,所以我可以这样做: 通用标签
但是要创建一个计数器变量,我必须使用tie
。我可以创建一个计数器并将其导出。但是,我真正想做的是使其外观为OO。看来我可以像这样创建一个new
方法:
通用标签
然后在我的主脚本中通过执行以下操作获得两个计数器: 通用标签
我认为这是行不通的,因为领带不能在副本中幸存下来(我在文档中的某个地方读过),难道没有办法做到这一点吗?
NB。我知道这只是样式问题,但是看起来更正确。
解决方案
领带魔术不会传递给赋值,因为它适用于变量本身,而不适用于变量所包含的值。您有几种选择:
返回参考: 通用标签
分配给全局: 通用标签
或者您可以将变量传递给构造函数: 通用标签
您甚至可以创建一个可以同时使用这两种方法的构造函数: 通用标签
在最后两个示例中,tie
直接传递给$_[0]
。这是因为@_
的元素是参数列表的别名,因此它的工作方式就像您在my $counter
行中键入了tie
一样。
最后,尽管您的示例非常清楚并遵循最佳实践,但本着TIMTOWTDI的精神,您可以像这样编写整个类: 通用标签
最后一件事要提。虽然您的问题是关于绑定变量的,但您也可以使用重载来实现这一点: 通用标签
但是您失去了通过分配来重置计数器的能力。您可以在sub set {$_[0][0] = $_[1]}
中添加Counter
方法。
不隶属于 StackOverflow