【问题标题】:How to read from a redirected file instead of taking command line parameters如何从重定向文件中读取而不是获取命令行参数
【发布时间】:2011-08-10 17:10:27
【问题描述】:

我正在编写一个程序,如果没有提供命令行参数,即@ARGV == 0,则程序接受三个输入。但是,该程序具有读取作为参数给出的任何文件的功能,因此

calculate input1 input2

对 file1 和 file2 中的数字运行公式。

我遇到的问题是我跑步的时候

calculate < input1

@ARGV 返回 0,因此它运行用于用户输入的代码。

如何解决这个问题,以便程序可以读取 input1 并使用其中的值进行计算?

【问题讨论】:

  • 您没有向我们显示任何代码。这是个问题。如果您不向我们展示,我们无法预测出什么问题。您是否手动打开和读取特定文件?请出示代码。

标签: perl command-line-arguments


【解决方案1】:

calculate &lt; input1 等价于cat input1 | calculate

您需要阅读&lt;STDIN&gt;,而不是寻找命令行参数。

【讨论】:

  • 只需执行以下操作:@file_input = &lt;STDIN&gt;;
  • 不,只是从&lt;&gt; 阅读。那没关系。另外,请不要一次将流全部读入内存。行处理模式是while (&lt;&gt;) { ... }
  • @tchrist:你有什么理由永远不会一次将流全部读入内存?如果我知道文件足够小不会成为问题,我经常会这样做。
  • 山姆:防守编码。您不想养成这种习惯,然后忘记在文件大小不可预测的环境中以“正确”的方式进行操作。
【解决方案2】:

这应该不是问题。如果你读的是&lt;&gt;(真的是&lt;ARGV&gt;),那就没有区别了。

如果重定向改变了事情,你一定做错了。你真的是自己打开文件吗???

【讨论】:

    【解决方案3】:

    您可以考虑使用Getopt::EuclidGetopt::Long 之类的模块来使参数传递更加明确。这也可能使其他用户更容易理解该程序。

    【讨论】:

    • 谁说有选择??
    猜你喜欢
    • 2019-12-05
    • 2016-06-09
    • 2023-03-25
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多