我正在致力於催化劑設計數據庫的前端。我是perl和催化劑的新手。我在控制器中遇到了一個錯誤。從催化劑控制器調用子程序
我想從一個表中獲取基因名稱,並將每個基因名稱傳遞給子程序gene_name(調用子程序gene_name),該子程序將執行某些功能。我有些如何獲取帶有基因名稱的列,但它們是以其他表的哈希引用的形式存在的。我對gene_name的調用不起作用。
任何想法如何將值傳遞給子例程而不是引用? 我的代碼如下:
my @gene_list = $c->model('Gene::GeneTable')->search({
},{
column =>[qw/symbol/],
}
);
foreach my $gene (@gene_list){
push @gene_aliases, &gene_name($gene);
}
我執行的代碼後得到的錯誤如下:
DBIx::Class::ResultSet::find(): Can't bind a reference (MyApp::Model::Gene::GeneTable=HASH(0x7ff6d88b7c58))
修訂
我gene_name()子程序是在另一個模塊我已經包含在控制器中。現在我已經(在控制器)改變for循環如下,目前它正在通過基因名gene_name()獲取別名(但查詢保持不變):
foreach my $gene (@gene_list){
push @gene_aliases, &gene_name($gene-> symbol);
}
我訪問的@gene_aliases我查看文件如下:
[% FOREACH g in gene_aliases -%]
[% g %]
[% END -%]
上述代碼是獲取哈希引用而不是頁面中的名稱。我無法在網頁上顯示基因名稱。如果我在for循環中給出[%g.symbol%],那麼頁面將是空的,沒有錯誤消息。希望這將是用於回答我的問題的足夠信息。如果沒有,我會詳細說明。
我的SQL查詢如下:提前
UPDATED2
Select Symbol from GeneTable;
感謝正如我不是一個全職程序員,我問的博客這些問題。請幫我解決我的問題。如果萬一我有搜索表單從用戶獲取基因名稱,並且此基因名稱必須傳遞給gene_name()子例程,那麼如何將此(傳遞給控制器以及如何調用gene_name())。請幫助我解決這個問題。 我在view.tt形式如下:
<form method="post" action "[% c.uri_for('/gene')%]">
<input type="text" name="search_alias">
<input type="submit" name="alias_search" value="Search">
</form>
我所有的別名叫做別名另一個表,這是在gene_name被用於()子程序。
首先,使用關鍵字'列',而不是'列'。 https://metacpan.org/module/DBIx::Class::Manual::ookook#Using-specific-columns – Joel
我自己並不使用DBIx :: Class,但在我看來,第一個散列參數用於搜索'應該有一些參數,當然?是不是該構造的目的是建立一個查詢相當於'SELECT * FROM gene WHERE symbol =?' – RET
@ret對不起Ret我無法正確地向你傳達我的問題。請參閱更新後的問題 – user1462804