小编Wil*_*ard的帖子

可以动态更改Perl的Log :: Log4perl的日志级别而无需更新配置吗?

我有一个在mod_perl下运行的Mason模板,它使用的是Log :: Log4perl.

我想更改特定appender的日志级别,但更改配置太尴尬了,因为它必须通过我们的部署过程才能上线.

有没有办法在Apache启动后在运行时更改appender的日志级别,而不更改配置文件,然后让更改影响任何新的Apache线程?

apache perl logging mod-perl log4perl

8
推荐指数
1
解决办法
1883
查看次数

我怎样才能在git中使用完整路径?

这个命令工作正常:

git diff relative/path/to/file.ext
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用完整路径,git说路径"在存储库外":

git diff /full/path/then/relative/path/to/file.ext
Run Code Online (Sandbox Code Playgroud)

我想git没有在/ full中找到.git目录,所以这就是它失败的原因.

但是我如何让git理解完整的路径,比如颠覆呢?

更新:git版本1.7.0.5

更新:这些文件总是在我的存储库中,我当前的目录也在我的存储库中!它仍然给出了这个错误.

git diff path relative-path

7
推荐指数
2
解决办法
5740
查看次数

在git中,如何增加合并的上下文?

当我合并大的更改时,git经常被无可救药地混淆,因为它没有使用足够的上下文行.它在两个不同子程序的相似外观之间混淆,两个子程序都碰巧以:

.
return 1;
.
}
Run Code Online (Sandbox Code Playgroud)

(此处用于表示空白行的点)

当我使用'git diff'时,我可以说-U20看到20行上下文.但是我可以告诉git在合并时使用这个标志吗?

答案可能与合并策略/选项有关,例如:

git merge -s recursive -X patience [branch]
Run Code Online (Sandbox Code Playgroud)

git diff merge git-merge

6
推荐指数
2
解决办法
1248
查看次数

我应该使用哪个Perl模块来生成验证CRUD网络表单?

有没有人成功使用类似DBIx :: Class :: WebFormCatalystX-CRUD的东西从数据库表自动构建自我验证的webform?

我正在想象一个模块,它读取数据库表模式,读取每列的约束,生成一些webform的抽象表示,带有错误消息的字段等.我正在使用Catalyst和Plack,它有一个很大的现有代码库.

我不想编写HTML webform,也不想编写任何验证逻辑.我的目标是以Ruby on Rails的风格编写尽可能少的代码.哪个Perl模块最适合这个?

更新:我已经用HTML :: FormFu解决了webform方面的问题,但它仍然很笨重地将表单输入映射到数据库,例如date_start和date_end都与'created'列相关,并且注释应该使用'LIKE%foo%匹配'等等'DBICFu'在哪里?

更新:这是一个Web应用程序,webform看起来不应该像数据库表.我不是在寻找数据库管理工具.

perl webforms crud catalyst dbix-class

5
推荐指数
1
解决办法
646
查看次数

在Perl中,在属性中保留对Catalyst的$ c的引用会导致内存泄漏吗?

我开始使用Catalyst编写一些Perl代码,如下所示:

package My::Controller;
extends 'Catalyst::Controller';

sub handler :Path :Args(0) :Location( some/url )
    my ($self, $c) = @_;

    $self->do_something_with_arguments($c);
    $self->make_a_decision($c);
    $self->another_method($c);
}
Run Code Online (Sandbox Code Playgroud)

然后我想.o(为什么一直传递$ c?),我改为:

package My::Controller;
extends 'Catalyst::Controller';

has c => (is => "rw", isa => "Catalyst");

sub handler :Path :Args(0) :Location( some/url )
    my ($self, $c) = @_;
    $self->c($c);

    $self->do_something_with_arguments;
    $self->make_a_decision;
    $self->another_method;
}
Run Code Online (Sandbox Code Playgroud)

处理程序只有一个入口点,因此$ self-> c将始终正确设置.

我的同事说,如果这就是Catalyst的意思,那么,每个人都会这样使用它.他们担心这样做会导致内存泄漏,因为在请求结束后对$ c的引用会持续存在.真的吗?

oop perl webserver scope catalyst

5
推荐指数
1
解决办法
242
查看次数

如何反转具有复杂值的哈希?

我有这个:

%lookup = (
    'Shelf' => { storage_types => 'Flat, Default' },
    'Locker' => { storage_types => 'Valuable' },
);
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

%reverse_lookup = (
    'Flat' => 'Shelf',
    'Default' => 'Shelf',
    'Valuable' => 'Locker',
);
Run Code Online (Sandbox Code Playgroud)

例如,我可以在测试中循环访问存储类型,并检查子例程是否返回正确的位置.

我无法理解多列表扩展部分.

%reverse_lookup = map { split(/,\s*/, $lookup{$_}) => $_ } keys %lookup; # wrong
Run Code Online (Sandbox Code Playgroud)

我想简单地使用地图或类似的东西,而不是foreach循环.

algorithm perl foreach hashmap map

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

我应该如何处理无法修复的错误测试

我有一组复杂的集成测试,它使用Perl的WWW :: Mechanize来驱动Web应用程序,并根据特定的数据组合检查结果.有超过20个子程序构成测试的逻辑,循环数据等.每个测试在不同的数据集上运行几个测试子程序.

Web应用程序并不完美,因此有时错误会导致测试因特定的数据组合而失败.但是这些组合非常罕见,我们的团队很长时间都不会费心去修复这些错误.建立许多其他新功能优先考虑.

那么失败的测试应该怎么办?每个数据组合只有几十个测试.1)我不能让它失败,因为整个测试套件都会失败.2)如果我们将它们评论出来,那意味着我们错过了对所有其他数据集进行测试.3)我可以在失败的特定数据集中添加一个标志,并且如果设置了该标志则不运行测试,但是我在我的测试子例程中的所有位置都传递了额外的标志.

什么是最干净,最简单的方法?或者干净又容易互相排斥?

testing perl logic

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

如何在Ubuntu中找到要降级的软件包的先前版本?

我怀疑在libfreetype6一个bug(2.4.4-1ubuntu2.1版)引起我的LibreOffice的作家崩溃每当我试图保存(如描述在这里),所以我想将其降级到以前的版本之一.

我试过摆弄apt-get,apt-cache,aptitude,Ubuntu软件中心,Synaptic Package Manager,但是不能从任何一个版本中获取任何旧版本的libfreetype6.

我已经尝试在debian.org,launchpad.net,packages.ubuntu.com上搜索旧版本的libfreetype6,但我不知道如何将这些文件放入我的一个软件包管理器中以正确安装它.

我正在使用Ubuntu 11.04(natty),我的架构是amd64.

ubuntu packages downgrade

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

当我使用 rebase 执行 git pull 时,如何禁用 rebase 挂钩?

命令:

git rebase --no-verify
Run Code Online (Sandbox Code Playgroud)

...允许我在不运行我创建的 git rebase 挂钩的情况下进行变基。

但我还将git pull设置为 rebase 而不是合并,所以现在当我执行 pull 时,它会运行我的 rebase 触发器。有没有办法将 --no-verify 选项传递给 git pull 并让它在变基时使用该选项?

(除了创建包装脚本以暂时将触发器移开,然后再将它们移回的最后手段之外)。

git git-pull git-rebase githooks

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