2013-10-07 2 views
3

우리는 Carp :: longmess() 매개 변수에 대한 액세스 권한을 얻을 수 있기를 기대하면서 통과 매개 변수가 많은 것을 밝히지 않는 몇 가지 다중 레벨 증거를 가지고 있습니다. 덤프가 실제로 있기 때문에 더 높은 레벨에서 을 전달했습니다.Carp :: longmess() 출력에서 ​​참조 된 매개 변수에 액세스합니다.

[DEBUG:2564] 2013/10/07 12:54:06 /opt/s3/server/S3Comparator.pm:183 - compare() - stacktrace: at (eval 1312) line 2. 
S3AIHelper::__ANON__('S3TransISO8583=HASH(0x1696eb10)') called at /opt/s3/server/S3AIHelper.pm line 777 
S3AIHelper::match_fields('S3TransISO8583=HASH(0x1696eb10)', 'HASH(0x168dc750)', '') called at /opt/s3/server/S3AIHelper.pm line 177 
S3AIHelper::fieldhits('S3TransGroup=HASH(0x16953d10)', 'HASH(0x168dc750)', '') called at (eval 1081) line 90 

는 구문 분석 후 다음과 같습니다

my $value = 'S3TransISO8583=HASH(0x1696eb10)'; 

가 어떻게이 완전히 손상 내용과 S3TransISO8583 객체가 될 수 없습니다. 동일한 실행 인스턴스에서이 작업을 수행하므로 메모리 주소가 유효합니다.

감사 Carp에서

+0

관련 항목 : http://stackoverflow.com/questions/1671281/how-can-i-convert-the-stringified-version-of-array-reference-to-actual-array-ref – RobEarl

답변

5

는, 모든 인수 강제도 캐릭터 라인 있습니다. 그러나 이것은 Perl입니다. 우리는이를 해결할 수 있습니다 - 원숭이가 Carp::format_arg sub를 패치합니다.

BEGIN { 
    use Data::Dump 'dump'; # nicer output than Data::Dumper 

    my $orig = \&Carp::format_arg; 

    *Carp::format_arg = sub { 
     my ($arg) = @_ 
     @_ = (dump $arg); 
     goto &$orig; 
    }; 
} 

도 더 자세히 유사한 해킹을 설명 내 this answer를 참조하십시오처럼

기본적으로,이 보일 것이다.

+0

감사합니다. '$ _ [0] = dump $ arg;'라인의 readonly 변수에 쓰기를 경고합니다. 하지만 당신의 stringify 예제가 작동하도록했습니다. – MortenB

+0

@MortenB 문제를 재현 할 수 없지만 지금 수정해야합니다. – amon

관련 문제