perl 에서 핸들러전달

mr.lee의 이미지

펄에서 파일핸들러나 STDOUT등을 전달, 저장, 불러와서 사용등이 가능한지요? 이를테면 아래와 같은 개념으로 사용을 할려고 합니다. (물론, 아래 코드는 에러납니다)

{
  package Test;

  sub new
  {
    my $class = shift;
    my $self = {};
    $self->{target} = undef;
    bless($self, $class);
    return $self;
  }

  sub prn
  {
    my $self = shift;
    if ($#_ == 2) {
      $self->{target} = shift;
    } else {
      $self->{target} = STDOUT;
    }
    $self->output(shift);
  }
    
  sub output
  {
    my $self = shift;
    my $content = shift;
    print($self->{target} <<END_TAG);
starting print.
$content
end print.
END_TAG
  }   
 
}

$test = Test->new();
$test->prn("This is standard output test\n");
local *FILEHANDLE;
open(FILEHANDLE, ">", "prn.txt");
$test->prn(FILEHANDLE, "This is file handle test\n");
close(FILEHANDLE);
mr.lee의 이미지

자답이네요...

{
  package Test;

  sub new
  {
    my $class = shift;
    my $self = {};
    $self->{target} = undef;
    bless($self, $class);
    return $self;
  }

  sub prn
  {
    my $self = shift;
    if ($#_ == 2) {
      $self->{target} = shift;
    } else {
      $self->{target} = *STDOUT; // use the typeglob notation
    }
    $self->output(shift);
  }
   
  sub output
  {
    my $self = shift;
    my $content = shift;
    my $target = $self->{target}; // 변수로 한번 받아서..
    print($target <<END_TAG); 
starting print.
$content
end print.
END_TAG
  }   
 
}

$test = Test->new();
$test->prn("This is standard output test\n");
local *FILEHANDLE;
open(FILEHANDLE, ">", "prn.txt");
$test->prn(*FILEHANDLE, "This is file handle test\n"); // use the typeglob notation
close(FILEHANDLE);