我可以在Perl中禁止来自fetch.pm的错误消息

时间:2016-10-18 15:46:58

标签: perl teamcity fetch

当使用Fetch从Teamcity下载网址时,我得到了提取失败!错误。但该文件的下载实际上是有效的。

他们最近更改了我们Teamcity服务器的权限,因此在获取要下载的文件的URL时我将使用用户名和密码。我只是想知道这是否会导致fetch验证网关的问题,但我可以下载该文件。有没有办法抑制此错误或只是将其降级为警告?

$(function(){

    function create_dynamic_form() {

        // code to dynamically create this form HERE


        // initialize validation on this new form ->

        $('#this-new-form-id').validate({
            ....
        });

    });

});

2 个答案:

答案 0 :(得分:0)

问题似乎是打印到STDERR的警告(消息)。显然你没有得到die或程序会退出。您可以通过设置$SIG{__WARN__}挂钩来控制打印消息的过程,最好在块中进行本地化。

my $where;

FETCH: {

    local $SIG{__WARN__} = sub { 
        print "WARN: @_";        # or whatever appropriate
    };

    $where = $ff->fetch   ( to => "$DOWNLOAD_LOCATION" );    
};

my $where = do { 
    local $SIG{__WARN__} = sub { print "WARN: @_" };
    $ff->fetch;
};

信号的处置 - 打印到STDERR - 在块之外恢复,这是local提供的。请参阅{{3>},特别是“概要”之后的文字。完成后,您也可以通过$SIG{__WARN__} = 'DEFAULT';手动执行此操作。

请参阅this in perlsub

  

如果安装了$SIG{__WARN__}处理程序,则不会打印任何消息。处理程序有责任在其认为合适的情况下处理消息(例如,将其转换为模具)。

另见%SIG条目warn

  

当要打印警告消息时,将调用$SIG{__WARN__}指示的例程。警告消息作为第一个参数传递。 __WARN__挂钩的存在会导致对STDERR的警告的普通打印被抑制。

在决定将什么称为“错误”以及“警告”可能有点武断时,很明显您的程序只向STDERR发出消息并继续。那么上面就足够了。

如果您被die击中,那么您可以将代码包装在in perlvar中。

答案 1 :(得分:0)

正如the documentation所述,只需设置

即可
$File::Fetch::WARN = 0;

禁止警告。