The answers to this question描述了如何将输入伪造成< STDIN>.我的目标是类似于这个问题:我的单元测试需要伪造输入到<>.
当我将相同的技术应用于假输入到<>时,它不起作用. <>的介绍级解释导致我相信从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 = <STDIN>; print "fake2 line is $line\n"; return 0; } fake1(); fake2();
fake2的作品,假的没有.一个示例会话(“qwerty”是我打字):
$perl /tmp/diamond.pl qwerty fake1 line is qwerty fake2 line is asdf
我的问题:
>我如何将输入输入到<>?
><>之间有什么区别?和< STDIN>当命令行上没有提供任何文件时? (即,为什么链接的问题中的技术可以用于< STDIN>但不适用于<>?)
谢谢.
解决方法
在您的第一个测试中尝试这样做:
open ARGV,\$fakeinput or croak "Cannot open STDIN to read from string: $ERRNO"; my $line = <>; print "fake1 line is $line\n";
这不利于不是“本地” – 不知道如果你可以使其本地化.(您可以做几次,但每次测试之前重置)
原文地址:https://www.jb51.cc/Perl/172452.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。