2014-01-31 26 views
1

我使用DBIx::Class::Schema::Loader從db模式生成(並不斷重新生成)結果類。將方法添加到生成的結果類

是否有一種將生成的方法添加到生成的類的習慣方法?

我目前做的是定義代碼附近的其他方法目前正使用結果類:

package Some::Package::Using::Result::Classes; 
use My::Schema::Result::Hello; 

... 
1; 

package My::Schema::Result::Hello; 

sub str { 
    my $self = shift; 
    sprintf("Hello: %s, %d", $self->name, $self->age); 
} 
1; 

(正如你看到的,我想要做的就是添加一個toString()樣功能。)

回答

2

如果你看看你的附近生成的結果類的頂部,你會看到這發表評論。

# Created by DBIx::Class::Schema::Loader 
# DO NOT MODIFY THE FIRST PART OF THIS FILE 

注意,它說你不應該修改文件的「第一部分」。

在文件的底部,你會看到這個。

# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-01-30 20:13:57 
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3eYA3YhJdL90HQRfNN07EA 

# You can replace this text with custom code or comments, and it will be preserved on regeneration 

所以你可以,只要你把它包含MD5哈希線下添加任何你想要的代碼,結果類文件。當你重新生成課程時,你放在那裏的任何東西都會存在。

0

我不知道這是地道的,但它是更緊湊:

*My::Schema::Result::Hello::str = sub 
    my $self = shift; 
    sprintf("Hello: %s, %d", $self->name, $self->age); 
}; 
+0

謝謝!不知道這個語法。那個'*'怎麼了? – sschober

+0

這是一個[typeglob](http://perldoc.perl.org/perldata.html#Typeglobs-and-Filehandles) –