小编Joe*_*Joe的帖子

与Moose,Try :: Tiny和TryCatch的奇怪行为

我刚开始和Moose一起工作,遇到了一个我无法弄清楚的奇怪问题.以下代码:

#!/usr/bin/env perl
use strict;
use warnings;
use Try::Tiny;

{
    package Foo;
    use Moose;
    has x => ( is => 'ro', isa => 'Int' );
}

my $f; 
try {
    $f = Foo->new(x => 'x');
} catch {
    die "oops\n";
}
print $f->x . "\n";
Run Code Online (Sandbox Code Playgroud)

生产:

Can't call method "x" on an undefined value at m2.pl line 19.
Run Code Online (Sandbox Code Playgroud)

但是,如果我替换Try::TinyTryCatch,它会像我认为的那样:

oops
Run Code Online (Sandbox Code Playgroud)

即使x是正确的值,也就是说5,Try::Tiny仍然产生了undefined value错误.

正如我一直在阅读的所有Moose文档一样Try::Tiny,我对此代码无效的原因感到非常困惑.我在这里做错了吗?

perl moose

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

在版本控制下处理系统特定信息的最佳实践是什么?

我是版本控制的新手,所以如果有一个众所周知的解决方案我会道歉.特别是对于这个问题,我正在使用git,但我很好奇如何处理所有版本控制系统.

我正在开发服务器上开发Web应用程序.我已经在两个地方定义了Web应用程序的绝对路径名(而不是文档根目录).在生产服务器上,此路径不同.我对如何处理这件事很困惑.

我可以:

  1. 重新配置开发服务器以共享与生产相同的路径
  2. 每次更新生产时编辑两次出现.

我不喜欢#1,因为我宁愿让应用程序灵活应对未来的任何变化.我不喜欢#2,因为如果我开始使用第三个路径开发第二个开发服务器,我将不得不为每次提交和更新更改它.

处理这个问题的最佳方法是什么?我想到了:

  1. 使用自定义关键字和变量扩展(例如在版本控制属性中设置属性$ PATH $并在所有文件中展开它).Git不支持这一点,因为它会带来巨大的性能损失.

  2. 使用更新后和预提交挂钩.可能是git的可能解决方案,但每次我查看状态时,它都会报告这两个文件被更改.不太干净.

  3. 从版本控制之外的配置文件中提取路径.然后我必须将配置文件放在所有服务器上的相同位置.也可能只有相同的路径开始.

有一个简单的方法来处理这个?我在想它吗?

git version-control configuration-files

6
推荐指数
1
解决办法
939
查看次数

标签 统计

configuration-files ×1

git ×1

moose ×1

perl ×1

version-control ×1