저는 다양한 프로그램을 호출하고 하나에서 다른 프로그램으로 데이터를 전달하는 스크립트 인 Perl 파이프 라인을 작성하고 있습니다. 스크립트 (pipeline.pl
)와이 스크립트가 관리하는 다양한 서브 스크립트는 subroutines.ph
에 정의되고 require subroutines.ph
지시문을 통해 포함 된 공통 서브 루틴 목록을 공유합니다. 이들의Perl 서브 루틴이 그것을 호출 한 행을 어떻게보고 할 수 있습니까?
하나는 그의 작업 오류 메시지가 인쇄 종료 할 수있는 기능입니다 (실제 서브 루틴이 일부 다른 작업을 수행하지만, 여기에 관련이없는 것, 아니, 내가 재발하고 있지 않다 die()
) :
## subroutines.ph
sub errorDie
{
my ($errMsg) = @_;
## various other cleanup tasks here
die($errMsg);
}
1;
그리고, pipeline.pl
에 :
foo at subroutines.ph line 5.
,369 :
#!/usr/bin/perl
require 'subroutines.ph';
errorDie("foo")
는 결과 위의 스크립트를 실행
이foo at pipelines.pl line 4.
그래서,에 발견 된 대신 라인 die()
을보고, 그것은 errorDie
서브 루틴이 호출 된 원래 스크립트의 라인을보고해야합니다 :
는 대신 같은 것을보고이 그것을 가능 . $errMsg
변수에 줄을 포함 시켜서이 작업을 수행 할 수 있다는 것을 알고 있지만, 그것은 깨지기 쉽고 번거 롭습니다. 이 작업을 자동으로 수행 할 수 있습니까? 외부 파일에 정의 된 서브 루틴이 호출 된 위치를 감지 할 수 있습니까? caller
있습니다
당신이 잉어에 대해 듣고 않았다. 나는 그것이 당신이 사용해야하는 것이라고 생각합니다. 이 링크 - http://perldoc.perl.org/Carp.html – Mohit
@ 모토 와우. 그렇습니다. 나는 '잉어'에 대해 알고 있었지만, 자동적으로 그 사실을 몰랐습니다. 감사! – terdon
@terdon : 그게 전부예요! – Borodin