흠, 다른 사람들이이 다양한 방식으로 어떻게 반응하는지 흥미 롭습니다. mk과 Daniel Fone은 명령의 표준 출력을 보거나 조작하고 싶다고 해석합니다 (둘 다 해결책은 표준 오류를 캡처하지 않습니다). 나는 Rudd 가깝게되었다고 생각합니다. Rudd의 대답에 대한 한 가지 트위스트는 내장 된 system() 명령을 자신의 버전으로 덮어서 기존 코드를 다시 작성하여 execute() 명령을 사용하지 않아도되도록하는 것입니다. 러드의 게시물에서 자신의 실행() 서브를 사용
는
, 당신은 당신의 코드 상단에 이런 식으로 뭔가를 할 수 :
if ($DEBUG) {
*{"CORE::GLOBAL::system"} = \&{"main::execute"};
}
내가 그 일을 생각하지만, 나는이 부두입니다 인정해야하고 그것은이었다 이 코드를 작성한 이후로
# importing into either the calling or global namespace _must_ be
# done from import(). Doing it elsewhere will not have desired results.
delete($opts{handle_system});
if ($do_system) {
if ($do_system eq 'local') {
*{"$callpkg\::system"} = \&{"$_package\::system"};
} else {
*{"CORE::GLOBAL::system"} = \&{"$_package\::system"};
}
}
글로벌'system' 명령을 교체에 큰 문제는 system'에 의해 복제 될 수없는 복잡한 프로토 타입을 가지고'이다 사용자가 지정한 프로토 타입 시스템. 결과적으로'system'을 사용자 정의 버전으로 바꾸면 일부 코드가 작동하지 않습니다. – cjm