이 질문에 대한 답변 은
에 입력을 위조하는 방법을 설명합니다. 내 목표는 그 질문과 비슷합니다. 내 단위 테스트는
에 가짜 입력이 필요합니다.
같은 기술을
에 가짜 입력에 적용하면 그렇지 않습니다. 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
내 질문 :
에 가짜 입력을 어떻게 할 수 있습니까? [의 차이점은 무엇입니까? 11156253] 및
명령 줄에 파일이없는 경우? (즉, 연결된 질문의 기술이
에서는 작동하지만
에서는 작동하지 않는 이유는 무엇입니까?)
감사합니다.