小编Lio*_*uru的帖子

使用DBIC将多个"新"项插入数据库

我正在进行一项生物信息学项目,该项目要求我从各种生物体中读取基因组数据(没有太多花哨,只需将其视为字符串)并将其插入数据库中.每次读取属于一个生物体,并且可以包含5000到5000万个基因,我需要在储存之前对其进行处理和分析.

目前执行此操作的脚本是用perl编写的,并且在完成所有计算之后,将结果存储在散列中,如下所示:

$new{$id}{gene_name}              = $id;
$new{$id}{gene_database_source} = $gene_database_source
$new{$id}{product}            = $product;
$new{$id}{sequence}               = $sequence;
$new{$id}{seqlength}              = $seqlength;
$new{$id}{digest}             = $digest;
$new{$id}{mw}                     = $mw;
$new{$id}{iep}                = $iep;
$new{$id}{tms}                = $tms;
Run Code Online (Sandbox Code Playgroud)

在读取所有基因之后,插入将通过散列循环到eval {}语句中.

eval {
foreach my $id (keys %new) {

  my $rs = $schema->resultset('Genes')->create(
    {
        gene_name               => $new{$id}{gene_name},
        gene_product            => $new{$id}{product},
        sequence                => $new{$id}{sequence},
        gene_protein_length     => $new{$id}{seqlength},
        digest                  => $new{$id}{digest},
        gene_isoelectric_point  => $new{$id}{iep},
        gene_molecular_weight   => $new{$id}{mw},
        gene_tmd_count          => $new{$id}{tms},
        gene_species            => $species,
        species_code            => $spc,
        user_id                 => $tdruserid,
        gene_database_source …
Run Code Online (Sandbox Code Playgroud)

mysql perl hash dbix-class

3
推荐指数
1
解决办法
116
查看次数

在Perl Catalyst应用程序上的配置变量上加载模块

我正在设置要部署的Catalyst Web应用程序,并希望从生产环境中删除-DebugStackTraceCatalyst插件app.pm。但是,由于我保留了测试环境,因此我想避免对此进行“硬编码”。相反,我想有一个定义环境的配置变量并相应地加载模块。所有源都在SVN上,如果我要更新存储库然后手动更改我在app.pm中加载的模块,它将变得混乱。

该应用程序当前使用configLoader模块读取local_app.yml具有所有配置的文件,该文件是未版本控制的,并允许对应用程序在开发,测试或生产环境中的工作方式进行一些控制;但是只有在启动应用程序之后(因此,在加载模块之后)才能读取这些内容。

这是的简化app.pm

package app;

use strict;
use warnings;
use Hash::Merge ();
use Sys::Hostname;

use Catalyst::Runtime '5.80';

use Catalyst qw/    
  -Debug
  StackTrace
  ConfigLoader
  SomeOtherModule
  AndYetAnotherOne
/;

__PACKAGE__->config(

  # Some local config stuff

);

# Start the application
__PACKAGE__->setup();

Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以不必使用Unix命令来找出正在运行该应用程序的主机?

perl catalyst

3
推荐指数
1
解决办法
66
查看次数

perl 中是否允许使用单个元素列表?

我正在尝试从 AJAX 请求(使用 Catalyst)动态创建值列表,如下所示:

my @listofvalues         = @{$params->{parameter_with_many_values}};
Run Code Online (Sandbox Code Playgroud)

然后我遍历列表以进行数据库插入(每个值一个)。因为我需要像上面那样循环各种列表,所以我需要访问列表的索引。我目前正在这样做:

foreach my $key (0 .. $#listofvalues){
  $table_model->new({
    field1                => $listofvalues[$key],
    field2                => $x,
    field3                => $another_listofvalues[$key]
    field4                => $yet_another_listofvalues[$key]
  });
} 
Run Code Online (Sandbox Code Playgroud)

当请求中收到两个或更多元素时,这似乎工作正常。每当接收到单个元素时,我都会收到类似的错误

[error] Caught exception in pbitdb::Controller::Subjects->add "Can't use string ("1") as an ARRAY ref while "strict refs" in use at /home/lioneluranl/svn/pbitdb/pbitdb/script/../lib/pbitdb/Controller/Subjects.pm line 119."
Run Code Online (Sandbox Code Playgroud)

在这种情况下,1是接收到的值,第 119行是声明 @listofvalues 的行。

现在我已经尝试了几个来解决这个问题,但还没有找到任何可以双向工作的东西(对于单个或不同的值)。有什么建议?

ajax perl list catalyst

2
推荐指数
1
解决办法
626
查看次数

perl eval块无错误地抛出execptions

我试图在一个eval块下放置一些DBIX事务来进行所有事务,如果中间出现问题则不进行.

我有几个交易正在这样做,没有一个给我带来问题.只有一个:

我构建交易的方式相当棘手,而且值得的是,这些实际上是有效的.如果你愿意,我可以发布那段代码,但也许eval块就足够了:

    eval {
      for (my $sub = 0; $sub < $neuroexam_index; $sub++){
        $transactions{neuroexams}{$sub}->insert;
      }
    } or die $!;
Run Code Online (Sandbox Code Playgroud)

问题是eval [error] Caught exception in pbitdb::Controller::Subjects->add "Died at /home/lioneluranl/svn/pbitdb/pbitdb/script/../lib/pbitdb/Controller/Subjects.pm line 411."在我的控制台中显示错误(),但实际上执行插入.那为什么会这样?

perl eval catalyst dbix-class

2
推荐指数
1
解决办法
159
查看次数

标签 统计

perl ×4

catalyst ×3

dbix-class ×2

ajax ×1

eval ×1

hash ×1

list ×1

mysql ×1