加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何伪造perl钻石经营者的投入?

发布时间:2020-12-15 21:33:23 所属栏目:大数据 来源:网络整理
导读:The answers to this question描述了如何将输入伪造成 STDIN.我的目标是类似于这个问题:我的单元测试需要伪造输入到. 当我将相同的技术应用于假输入到时,它不起作用. 的介绍级解释导致我相信从STDIN读取命令行中没有提供任何文件,但这似乎并非如此. 我正在
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 = "asdfn";
    open my $stdin,'<',$fakeinput
      or croak "Cannot open STDIN to read from string: $ERRNO";
    local *STDIN = $stdin;

    my $line = <>;
    print "fake1 line is $linen";

    return 0;
}

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

    my $line = <STDIN>;
    print "fake2 line is $linen";

    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 $linen";

这不利于不是“本地” – 不知道如果你可以使其本地化.(您可以做几次,但每次测试之前重置)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读