펄의 다이아몬드 연산자에 가짜 입력을하는 방법?

이 질문에 대한 답변 에 입력을 위조하는 방법을 설명합니다. 내 목표는 그 질문과 비슷합니다. 내 단위 테스트는 에 가짜 입력이 필요합니다.

같은 기술을 에 가짜 입력에 적용하면 그렇지 않습니다. t 작동합니다. 에 대한 입문 수준의 설명은 명령 줄에 파일이 제공되지 않을 때 STDIN에서 읽는다고 믿게 만들었지 만, 그렇지 않은 것 같습니다.

샘플 저는 일을하려고합니다 :

#!/usr/bin/perl -w

use strict;
use warnings;
use Carp;
use English qw( -no_match_vars );

sub fake1 {
    my $fakeinput = "asdf\n";
    open my $stdin, '<', \$fakeinput
      or croak "Cannot open STDIN to read from string: $ERRNO";
    local *STDIN = $stdin;

    my $line = <>;
    print "fake1 line is $line\n";

    return 0;
}

sub fake2 {
    my $fakeinput = "asdf\n";
    open my $stdin, '<', \$fakeinput
      or croak "Cannot open STDIN to read from string: $ERRNO";
    local *STDIN = $stdin;

    my $line = ;
    print "fake2 line is $line\n";

    return 0;
}

fake1();
fake2();

fake2 는 작동하지만 fake1 는 작동하지 않습니다. 샘플 세션 ( "qwerty"는 직접 입력) :

$ perl /tmp/diamond.pl
qwerty
fake1 line is qwerty

fake2 line is asdf

내 질문 :

  1. 에 가짜 입력을 어떻게 할 수 있습니까?
  2. [의 차이점은 무엇입니까? 11156253] 및 명령 줄에 파일이없는 경우? (즉, 연결된 질문의 기술이 에서는 작동하지만 에서는 작동하지 않는 이유는 무엇입니까?)

감사합니다.

13
задан Community 23 May 2017 в 10:00
поделиться