perl 에서 문자열을 인자로 넘길때

mr.lee의 이미지

문자열을 빈번하게 다른 메소드로 넘길일이 있을때..

문자열도 레퍼런스로 넘기는게 효율적인가요?

아님, 그냥 넘겨도 복사하지 않고 자바처럼 '참조를 값으로' 넘기는지요?

sub prn
{
  my $a = shift;
  print($$a);
}

my $str = "abc\n";
prn(\$str);

음 지금 테스트를 해보니 레퍼런스로 넘길때가 오히려 조금 더 시간을 잡아먹네요. '참조'의 '참조'를 값으로 넘기게 되니까 한단계가 늘어서 그런가 싶기도 합니다.

unicozy의 이미지

결론부터 말씀드리자면,
1. 인자는 기본적으로 복사가 되서 넘어갑니다.
2. 인자의 크기가 작을때는 큰 차이가 없지만, 크기가 커지면 참조형식이 빠릅니다.

제가 테스트에 사용한 코드입니다.

#!/usr/bin/perl -w

use Benchmark qw( cmpthese );

$str = "x"x100;

cmpthese(-5, {
        a => 'sub1',
        b => 'sub2',
});

sub sub1
{
        sub1_1($str);
}

sub sub1_1
{
        $aa = shift;
}

sub sub2
{
        sub2_1(\$str);
}

sub sub2_1
{
        $aa = shift;
}