Perl中的bless和tie之间有什么区别?

时间:2016-12-21 08:31:55

标签: perl tie bless

我正在练习一些面试问题。我看了perldoc -f tie但是无法得到它。我知道bless并且正在我的程序中使用。

任何人都可以告诉我tie是什么以及它与bless有什么关联和不同之处用法?我将欣赏任何简单的例子。

PS:我是一名perl开发人员,在日常生活中使用它。我关心的不是面试,而是知道面试

2 个答案:

答案 0 :(得分:4)

bless用于构造对象。

tie允许代码为接口提供变量。例如它可能看起来像是在分配一个变量,但你真的在调用一个变量。 tie和其他形式的魔法主要用于提供"聪明的"接口(例如,改变%ENV改变环境,改变%SIG设置信号处理程序,$!镜像errnoperror等。它还可以用于扩展现有代码的有用性(例如,创建看起来像文件句柄的东西允许重用可能从文件句柄获取其输入的代码)。

答案 1 :(得分:3)

我可能会回答你的面试问题:

Tie and bless提供类似的功能,因为它们将自定义行为与变量相关联。区别在于焦点 - tie是关于向标准添加新行为的问题。数据结构,其中bless是关于创建新的'数据结构一共。

因此tie对您正在使用的数据类型的基本操作更加有限,其中bless数据结构具有几乎无限的可能性范围。但权衡的是,tie ed变量可以作为替换的下降 - 如果你扩展一个'哈希'通过{{1}将它放到文件或数据库中,它仍然可以以相同的方式运行,而无需任何类型的代码修订。

这种优势在很多方面也是它的弱点 - 在未来的程序员面对某些代码中的对象和方法调用时,他们会知道他们需要在课堂上了解什么是'正在进行 - 他们可能没有意识到绑定的哈希(或标量)正在做一些特殊的事情'。

因此,我建议应该为样式tie保留一个诊断和测试角色 - 在哈希值中更改值时记录它可能很方便,但是不应该使用使事情以意想不到的方式表现。