我刚开始和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::Tiny为TryCatch,它会像我认为的那样:
oops
Run Code Online (Sandbox Code Playgroud)
即使x是正确的值,也就是说5,Try::Tiny仍然产生了undefined value错误.
正如我一直在阅读的所有Moose文档一样Try::Tiny,我对此代码无效的原因感到非常困惑.我在这里做错了吗?
我是版本控制的新手,所以如果有一个众所周知的解决方案我会道歉.特别是对于这个问题,我正在使用git,但我很好奇如何处理所有版本控制系统.
我正在开发服务器上开发Web应用程序.我已经在两个地方定义了Web应用程序的绝对路径名(而不是文档根目录).在生产服务器上,此路径不同.我对如何处理这件事很困惑.
我可以:
我不喜欢#1,因为我宁愿让应用程序灵活应对未来的任何变化.我不喜欢#2,因为如果我开始使用第三个路径开发第二个开发服务器,我将不得不为每次提交和更新更改它.
处理这个问题的最佳方法是什么?我想到了:
使用自定义关键字和变量扩展(例如在版本控制属性中设置属性$ PATH $并在所有文件中展开它).Git不支持这一点,因为它会带来巨大的性能损失.
使用更新后和预提交挂钩.可能是git的可能解决方案,但每次我查看状态时,它都会报告这两个文件被更改.不太干净.
从版本控制之外的配置文件中提取路径.然后我必须将配置文件放在所有服务器上的相同位置.也可能只有相同的路径开始.
有一个简单的方法来处理这个?我在想它吗?