如何在'use base'包中创建子程序?

时间:2012-05-19 08:21:45

标签: perl orm metaprogramming

我正在尝试创建一个小型ORM库,以便在Mojolicious Web应用程序中使用。我已经非常喜欢Ruby的Datamapper库,如果可能的话,我想模仿它的一些行为。

在Datamapper中你可以混合资源,然后在你的班级中添加方法,例如'all'等:

# User.rb
class User
    include Datamapper::Resource;
end
...

# Application.rb
users = User.all

对于我的库,我试图为从模型继承的模块添加一些包级别功能,以实现类似的行为。

从本质上讲,我希望能够做一些近似以下的事情:

# User.pm
package User;
use base Model;
...

# Application.pm
my @users = User::all();

我已经浏览过perl中的元编程示例,但没有发现任何立即有用的内容。

我所追求的是以下内容:

  • 以更惯用的方式实现类似优雅的替代perl模式
  • 能够继承包级别的子例程以及对象级别
  • 能够在当前包的范围内执行“使用”代码,或
  • 将当前包传递给在'use'
  • 上执行的代码
  • Perl中的元编程指南
  • 现有的声明性ORM库,支持轻松创建模拟适配器以及DB2和MySQL

理想情况下,我希望尽可能避免在大字符串上运行eval。

非常感谢任何帮助: - )

1 个答案:

答案 0 :(得分:2)

  

替代perl模式,以更惯用的方式实现类似的优雅

Roles超越mixins。

  

能够在包级别以及对象级别继承子例程

角色通常在包级别上使用,但使用技巧也只能应用于实例。 ( FIXME 如何?)

  

能够在当前包的范围内“使用”执行代码

import

  

将当前包传递给在'use'

上执行的代码

use语句中的所有参数都作为参数传递给import

  

Perl中的元编程指南

Moose::ManualMoose::Cookbook

  

现有的声明性ORM库,支持轻松创建模拟适配器以及DB2和MySQL

DBIx::Class