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

关于DESTROY问题

时间:2011-04-08

来源:互联网

本帖最后由 ace_fei 于 2011-04-08 17:31 编辑

今天用Hudson做dailyCI的时候,发现在编译失败退出时,Hudson还是判定BUILD SUCCESSFUL。
   
     我找到Hudson上调用的编译脚本,发现问题出在DESTROY函数里面。
   
     如果屏蔽DESTROY函数中的my $context = $self->fn();     最后exit status就为1, 否则就为0。
     
     我理解问题所在是因为,如果在DESTROY中执行 system或者反引号``命令的话,会改变exit status。
     不知道我这样理解是不是正确的?
  1. #!/usr/bin/perl
  2. package test;
  3. sub new()
  4. {
  5.     my $ref = shift;
  6.     my $class = ref($ref) || $ref;
  7.     my $self = {};
  8.     bless($self, $class);
  9.     return $self;
  10. }

  11. sub DESTROY()
  12. {
  13.      my $self = shift;
  14.      print "this is destroy\n";
  15.      my $context = $self->fn();
  16.      print $context;
  17. }

  18. sub fn()
  19. {
  20.      my $self = shift;
  21.      chdir "/home/fesu";
  22.      my $cs = `cat 1.pl`;
  23. }

  24. sub main()
  25. {
  26.     my $self = shift;

  27.     print "this is main\nexit 1\n";
  28.     exit 1;
  29. }

  30. package main;
  31. my $mytest = new test();
  32. $mytest->main();
复制代码

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

唉,试了下还真是这么个样子的,竟然 DESTROY 会修改程序的退出值, 有点儿意思,有空再研究研究

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