+ -
当前位置:首页 → 问答吧 → 关于DESTROY问题

关于DESTROY问题

时间:2011-04-08

来源:互联网

今天用Hudson做dailyCI的时候,发现在编译失败退出时,Hudson还是判定BUILD SUCCESSFUL。
   
  我找到Hudson上调用的编译脚本,发现问题出在DESTROY函数里面。
   
  如果屏蔽DESTROY函数中的my $context = $self->fn(); 最后exit status就为1, 否则就为0。
   
  我理解问题所在是因为,如果在DESTROY中执行 system或者反引号``命令的话,会改变exit status。
  不知道我这样理解是不是正确的?
Perl code

#!/usr/bin/perl 
package test;
sub new()
{
    my $ref = shift;
    my $class = ref($ref) || $ref;
    my $self = {};
    bless($self, $class);
    return $self;
}
 
sub DESTROY()
{
     my $self = shift;
     print "this is destroy\n";
     my $context = $self->fn();
     print $context;
}
 
sub fn()
{
     my $self = shift;
     chdir "/home/fesu";
     my $cs = `cat 1.pl`;
}
 
sub main()
{
    my $self = shift;
 
    print "this is main\nexit 1\n";
    exit 1;
}
 
package main;
my $mytest = new test();
$mytest->main();

作者: ace_fei   发布时间: 2011-04-08

不应该改变退出状态,你的问题应该还有其他原因。至少你的代码我在Windows测试是没有问题的。

作者: fibbery   发布时间: 2011-04-08