거대한 문자열을 하위 루틴으로 전송하는 작업은 이 전송시 복사가 발생하지 않도록 을 피하는 것입니다. 매우 큰 문자열을 가리키는 $ref
이라는 참조가 있다고 가정 해보십시오. 또한 f($)
서브 루틴이 단일 인수를 허용하도록합시다. 문제는 f
에이 문자열을 아니한 있습니다Perl : 거대한 문자열을 복사하지 않고 서브 루틴으로 전송
f($$ref); # data pointed by $ref is not copied to temporary value here
정말 내가 하나의 문자열을하지 않은,하지만 그들 중 목록의이 @a
에 할당하자
my @a = ($ref_1, $ref_2, $ref_3, ...);
이제 문제는 해결 될 것
f(map {$$_} @a);
하지만 map
에 의해 는 0에서 사본 각 역 참조 항목을 수행을 복사 한 다음 복사 한 인스턴스를 f
으로 전송하십시오.
실제로는 CPAN 모듈의 메소드이기 때문에 f
에 대해서는 제어 할 수 없습니다.
작업을 해결할 수 있습니까? 미리 감사드립니다.
'$ ref'가 참조 인 경우'f ($ ref)'를 호출하면 어떨까요? 목록을 보려면'f ($ _) for @ a'를 사용할 수 있습니다. – choroba
@indexless : 이것이'XML :: LibXML'과 관련이 있다면 그렇게 말하십시오. – Zaid
@Zaid DBI 모듈에 뭔가가 있습니다. -> execute() 메서드에 값 목록을 전송하려고하지만 그 목록에는 삽입 할 값에 대한 참조가 들어 있습니다. – indexless