如何伪造 Perl 钻石运算符的输入?

2024-04-12

这个问题的答案 https://stackoverflow.com/questions/1213986/how-can-i-fake-stdin-in-perl描述如何伪造输入<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 works, fake1才不是。示例会话(“qwerty”是我输入的):

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

fake2 line is asdf

我的问题:

  1. 我怎样才能伪造输入<>?
  2. 有什么区别<> and <STDIN>当命令行上没有给出文件时? (即为什么链接问题中的技术适用于<STDIN>但不是为了<>?)

Thanks.


在你的第一次测试中试试这个:

open ARGV, '<', \$fakeinput
      or croak "Cannot open STDIN to read from string: $ERRNO";

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

这样做的缺点是不是“本地化”——不知道是否可以将其本地化。 (不过,您可以多次执行此操作,并在每次测试前重置。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何伪造 Perl 钻石运算符的输入? 的相关文章

  • JUnit、测试和线程

    当我连续运行多个 JUnit 测试时 JUnit 是否为每次执行创建一个新线程 或者所有内容都包装在一个线程中 Thanks 这一切都在一个线程上 您没有说明如何调用测试 但例如 运行 TestSuite 将按顺序运行套件中的所有测试 如果
  • 在 PHPUnit 中实现给定接口的模拟对象上未定义方法?

    我是单元测试和 PHPUnit 的新手 我需要一个模拟 我可以完全控制它 实现ConfigurationInterface界面 测试对象是ReportEventParamConverter对象和测试必须检查我的对象和界面之间的交互 Repo
  • 在二进制 R 包中包含测试

    我在用testthat为我的 R 包编写单元测试 我见过一些软件包作者 比如来自Rcpp and ggplot2 使用二进制文件分发单元测试 但是 当我使用 RStudio 0 98 1102 构建包时devtools 1 7 0 test
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 在单元测试中重复的代码是否更容易被容忍?

    前段时间 当我经历并重构它们以使其更加出色时 我破坏了几个单元测试DRY http en wikipedia org wiki Don 27t repeat yourself 每次测试的目的不再明确 测试的可读性和可维护性之间似乎需要权衡
  • Perl Regex:如何从 CSV 行中删除引号内的引号

    我从 CSV 文件中得到了一行 作为场围场和 作为字段分隔符作为字符串 有时有 在打破场围的数据中 我正在寻找一个正则表达式来删除这些 我的字符串看起来像这样 my csv qq 123456 024003 Stuff 28 stuff w
  • 在Python中修改大型文本文件最后一行的最有效方法

    我需要更新几个超过 2GB 的文件的最后一行 这些文件由无法读取的文本行组成readlines 目前 它可以通过逐行循环来正常工作 但是 我想知道是否有任何编译库可以更有效地实现这一点 谢谢 目前的方法 myfile open large
  • 带有 Spock Stub 的泛型

    我无法为泛型类编译 Spock 存根 构造函数的签名如下 SomeClass SerSup
  • 我们如何针对 DOM 操作执行单元测试?

    QUnit 的介绍位于netTuts com http net tutsplus com tutorials javascript ajax how to test your javascript code with qunit 关于如何针
  • 在什么情况下会在快速测试中使用expectationForNotification

    我有点困惑什么 什么时候做expectationForNotification as opposed to期望与描述 我无法在 swift 中找到任何明确的示例来说明您何时以及如何处理此调用 我假设它可能是为了测试通知 但看起来它可能只是整
  • Jasmine的spyOn()是否允许执行spies on函数?

    茉莉花有吗spyOn 方法允许执行监视函数 或者确实是这样 当 即将 调用监视方法时拦截调用 并返回true PS 谁能给我解释一下spyOn 的内部运作 Spy 间谍可以伪装成一个函数或一个对象 您可以在编写单元测试代码时使用它们来检查函
  • VS2012 & TFS2012 单元测试主要问题

    我们使用 VS2012 和 TFS2012 并为我们的代码编写单元测试 我们想要报告代码覆盖率 并在单元测试中使用 config 文件来测试应用程序设置 以及一些其他日志记录设置 MS Enterprise 库设置等 App config
  • Perl OO 方法调用第一个参数值 (->)

    就 Perl OO 而言 到底做了什么 gt do 例如我拨打 main 电话 result a b gt mymethod 在我定义的包中mymethod 我使用以下内容 my class 总的来说 我显然没有向mymethod 那么哪里
  • 如何通过pthreads管理两个或多个消费者?

    我有一个正在寻求解决的通用问题 即从标准输入或常规文件流发送到应用程序的二进制数据块 应用程序又将二进制数据转换为文本 使用线程 我想在将文本传输到下一个应用程序之前对其进行处理 该应用程序会进一步修改该文本 依此类推 作为一个简单的测试用
  • Python:数百万个小文件的读写速度缓慢

    结论 看来 HDF5 是适合我的目的的方法 基本上 HDF5 是一种用于存储和管理数据的数据模型 库和文件格式 并且旨在处理令人难以置信的大量数据 它有一个名为 python tables 的 Python 模块 链接在下面的答案中 HDF
  • java IO将一个文件复制到另一个文件

    我有两个 Java io File 对象 file1 和 file2 我想将 file1 的内容复制到 file2 有没有一种标准方法可以做到这一点 而无需我创建一个读取 file1 并写入 file2 的方法 不 没有内置方法可以做到这一
  • WWW::Mechanize::Firefox - 如何打开多个选项卡

    我想打开两个单独的选项卡并在 Firefox 中保持打开状态 我在用WWW Mechanize Firefox 请找到下面的代码 usr bin perl w use strict use WWW Mechanize Firefox my
  • 使用 jest 存根函数

    有没有办法使用 jest API 来存根函数 我习惯于使用 sinon 存根 在这里我可以使用存根为来自我的测试单元的任何函数调用编写单元测试 http sinonjs org releases v1 17 7 stubs http sin
  • 在 Eclipse Testrunner 中使用名称的 ParameterizedTest

    当您使用 Eclipse TestRunner 运行 JUnit 4 ParameterizedTest 时 图形表示相当愚蠢 对于每个测试 您都有一个名为 0 1 ETC 是否可以进行测试 0 1 等显式名称 实施一个toString测试
  • 我的 Perl 脚本中的 findnodes 语句有什么问题?

    我有一个简单的 xml 文件 如下所示

随机推荐

  • 使用 r 正则表达式删除第一个数字后的字符串

    如何删除字符串第一个数字之后包含的所有内容 x lt c Hubert 208 apt 1 Mass Av 300 block 3 After 这个问题 https stackoverflow com questions 37666077
  • Cygwin 的 bash 出错后变得极其缓慢

    我意识到还有一些关于为什么 Cygwin 明显很慢的问题 但这个案例似乎很独特 我遇到了一些问题 报告了很多错误 然后重新启动后 从 bash 启动的任何进程都非常慢 老实说 我不知道是什么原因造成的 我检查了taskmgr中的进程优先级
  • C# 广播是UDP消息,监听多个回复

    我正在尝试编写一些执行 UDP 广播的代码 然后侦听来自远程服务器的答复 说明它们存在 它用于识别子网上运行服务器应用程序的计算机 因此基本上会发出 谁在那儿 并听取所有答复 我在 Java 中有这个 工作完美 它将 DatagramPac
  • 导入 CSS 最终出现错误

    最近我进入了这个网站 http thecodeplayer com 并发现了几个非常酷的设计 但在其中一些设计中 在 CSS 部分中有一段用于导入的代码片段 如下所示 import url http fonts googleapis com
  • 发送密钥后 Selenium WebElement 值为空

    我正在运行一些简单的表单测试 其中值是添加的字段 将每个值添加到字段后 input SendKeys value 我想检查该字段中的值是否正确 这听起来可能很不寻常 但该字段可能附加了 ajax 搜索 如果搜索没有返回匹配项 则该字段将为空
  • 如何在使用旧版本 gcc 的系统上动态链接到 libc.so.6、libstdc++.so.6 的本地副本

    我的代码是用 c 2011 编写的 并用 g 4 8 编译的 但是 我的系统管理员不会从 gcc g 4 1 升级计算集群 我收到以下错误 lib64 libc so 6 version GLIBC 2 14 not found requi
  • 如何检测文件名中的常见字符串组

    我正在尝试找出一种检测文件组的方法 例如 如果给定目录有以下文件 生日001 jpg 生日002 jpg 生日003 jpg Picknic1 jpg Picknic2 jpg 下午 jpg 我想将列表压缩为类似的内容 生日 3张 野餐 2
  • 在 Matlab 中按下某个键停止无限 while 循环

    我有一个无限的 while 循环 我想在按下键盘按键时停止它 伪代码 While 1 do stuff listening for key if key is pressed break end end 功能waitforbuttonpre
  • 使用JQUERY/JSON自动填充选择下拉框

    好吧 我花了很多时间查看示例 但找不到一个对我的情况有足够帮助的示例 我有一个 JSON 文件 对此示例进行了简化 Company Position Manager Name 11 joe 12 bill 166 John Position
  • 在没有“new List”的情况下初始化列表属性会导致 NullReferenceException

    using System using System Collections Generic class Parent public Child Child get set class Child public List
  • 您可以用 PHP 将送货地址传递给 Stripe Checkout 吗?

    我在用着Stripe 结帐 API https stripe com docs checkout integration builder指导网站用户付款 有没有办法将送货地址传递到托管结帐页面 以便从推荐人而不是 Stripe 本身收集该地
  • 如何使用 jquery 检测 IE11 [重复]

    这个问题在这里已经有答案了 我有代码 browser 来检测浏览器 并根据结果确定一些布局样式 但现在有了 ie 11 browser 将提供 mozilla v 11 有什么修复建议吗 尝试这个 var isIE11 navigator
  • 正则表达式太贪婪了

    我正在尝试编写一个正则表达式 但它太贪心了 输入字符串可以采用以下格式之一 STUFF 12 1234 or STUFF 1234 我想要做的是创建一个正则表达式来抓取最后一个之后的字符 所以在上面的例子中 这将是数字 1234 最后一个之
  • Prolog 中的聊天机器人

    我一直在尝试在序言中创建一个聊天机器人 作为作业 到目前为止 我已经在 pl 文件中创建了一个数据库 并且列出了很多可能的对话 我知道序言是这样工作的 例如如果我们有 Chatbot good 然后我们输入 Chatbot good 它会回
  • 如何通过命令查找mongodb数据和日志文件位置?

    如何通过命令查找mongodb数据和日志文件位置 就像下面的 SQL 服务器命令一样 从 sys database files 中选择 最简单的方法可能是getCmdLineOpts命令 db getSiblingDB admin runC
  • 不使用 pip 安装 pythonwheel 文件

    是否可以在不使用的情况下安装Python轮pip 我总是遇到安装问题pip 所以我通常通过复制和粘贴来手动安装库 我想知道是否有一种方法可以以类似的方式处理轮文件 我假设你有互联网接入 但是你没有有效的 pip 安装 下载点轮 wget h
  • 批处理核心数据获取结果

    我正在执行一个返回大约 2000 个实体的获取请求 目前 在我的设备上这大约需要 20 秒 所以我想我可以将获取限制设置为 100 然后当用户滚动到表视图的末尾时 获取接下来的 100 个实体 这可以通过使用来完成NSFetchReques
  • 不同的视图取决于 ContentControl (Caliburn.Micro)

    我将 ViewModel 绑定到 ContentControls 并让 Caliburn 负责创建和绑定视图 但是 我想根据我绑定到的 ContentControl 自定义 Caliburns ViewModel gt View 约定 例如
  • 如何从 xml 构建 .xsd 文件?

    有没有办法从 xml 文件生成 xsd 是否有任何类文件可以执行此操作 我不介意解决方案是 c 还是 java 我想用代码来做到这一点 但如果有任何好的免费工具也可以 Thanks xsd exe http msdn microsoft c
  • 如何伪造 Perl 钻石运算符的输入?

    这个问题的答案 https stackoverflow com questions 1213986 how can i fake stdin in perl描述如何伪造输入