2012-08-29 4 views
2

Module::Reload::Selective을 사용하여 모듈을로드하는 Perl 스크립트가 있습니다. perl 스크립트는 다소 비슷하게 보입니다.Perl 1,000 서브 루틴이 다시 정의되었습니다.

#!/usr/bin/perl 

use strict; 
use warnings; 
use Module::Reload::Selective; 

&reload; 

sub reload { 
    Module::Reload::Selective->reload(qw(myModule)); 
    import myModule qw($reloadtime); 
    $reloadtime = ${myModule::reloadtime}; 
} 

이 모듈은 다음과 같습니다 : 나는 "의 일부를 주석 만약 내가 눈치

Subroutine export_fail redefined at /usr/local/share/perl/5.14.2/Carp.pm line 64. 
Subroutine _cgc redefined at /usr/local/share/perl/5.14.2/Carp.pm line 66. 
Subroutine longmess redefined at /usr/local/share/perl/5.14.2/Carp.pm line 72. 
Subroutine shortmess redefined at /usr/local/share/perl/5.14.2/Carp.pm line 92. 
Subroutine croak redefined at /usr/local/share/perl/5.14.2/Carp.pm line 100. 
Subroutine confess redefined at /usr/local/share/perl/5.14.2/Carp.pm line 101. 
Subroutine carp redefined at /usr/local/share/perl/5.14.2/Carp.pm line 102. 

:

package myModule; 

use Config::General; 
use Data::Dumper; 
use DBI; 
use HTTP::Request::Common qw { POST }; 
use HTTP::Headers; 
use JSON::XS; 
use LWP::UserAgent; 
use Module::Pluggable search_path => "Bot"; 
use POSIX qw(strftime ceil); 

# stuff here 
1; 

은 내가 이런 식으로 약 100 얻을 주요 스크립트를 실행하는 경우 사용 "문을 내 모듈에서 사라질 것입니다. 그러나 나는 그것들을 필요로한다. 나는 모든 것을 조사하고 여러 가지를 시도했다. 아무 소용이 없습니다.

+1

게시 한 코드는 당신이 설명하는 오류를 제공하지 않습니다. – ikegami

답변

2

때로는 서브 루틴을 재정의하는 것이 좋습니다. 당신은 당신이 무슨 일을하고 있는지 알고 있고 경고를 억제하려면, 당신의 reload 방법의 상단에

no warnings 'redefine'; 

을 넣어.


그리고 최후의 수단으로

sub reload { 
    local $SIG{__WARN__} = sub {}; 
    ... do something that warns ... 
} 
, 경고가 기록되기 때문에 : 당신은 당신이 뭘 알고


또 다른 옵션은 다시, 너무 오래, 일시적으로 내장 경고 처리기를 사용하지 않도록하는 것입니다 STDERR으로 일시적으로 STDERR을 리디렉션 할 수 있습니다.

sub reload { 
    open my $devnull, '>/dev/null'; # Windows: >nul 
    local *STDERR = *$devnull; 
    ... do something that warns ... 
} 
+0

경고 문을 추가하지 않았지만 여전히 경고문을 받았습니다. – gdanko

1

나는 이것도 가지고 있었다. 제 경우에는 Module :: Pluggable의 plugins() 호출에서 오류를 추적했습니다. 그것이 당신의 소음이 또한에서 오는 곳 인 경우에 이것은 또한 당신을 위해 작동 할지도 모르다. 이 같은 것을 할 수 있도록, http://cpansearch.perl.org/src/SIMONW/Module-Pluggable-5.1/lib/Module/Pluggable.pm

이 플러그인은() 비싼 얻을 수있는 필요 이상으로 호출된다는 설명 : didn를

package Foo; 
    use strict; 
    use Module::Pluggable sub_name => '_plugins'; 

    our @PLUGINS; 
    sub plugins { @PLUGINS ||= shift->_plugins } 
    1; 

을 '

대답은 여기 잡초에 처음에는 나를 위해 정확히 작동하지만, 플러그인을 여러 줄로 채 웁니다. 그리고 채워 졌거나 $ self에 배열 참조를 반환했습니다.

관련 문제