【问题标题】:How to pass arguments as a text file to perl script in runtime如何在运行时将参数作为文本文件传递给 perl 脚本
【发布时间】:2011-08-03 11:05:37
【问题描述】:

我有一个名为 xyz.prl 的 perl 脚本文件。 如果我在命令提示符下运行它,那么它会要求一些命令行输入。 因此,我将所有输入都放在了一个名为 input.txt 的单独文件中。 然后我在命令窗口中使用了以下命令。

D:>xyz.prl < input.txt

但它并没有从文件 input.txt 中获取值,而是通过请求第一个值进入无限循环。

如果我只给出 xyz.prl ,那么它要求输入值。并接受我手动给出的值。

实际上,我必须开发一个基于 VC++ (MFC) 对话框的应用程序并使用 windowsXP。我必须使用系统命令来运行这个 xyz.prl,并且我必须将所有参数作为文本文件 (input.txt) 传递。很遗憾地通知您,xyz.prl 是高度安全的文件,我无法共享代码。

如果我直接在命令提示符下给出 xyz.prl,它会一一要求输入值。但是使用系统调用我不能发送这样的值。

我对 perl 完全陌生。所以请让我知道我必须传递给系统命令的命令。

谢谢,

塞古 谢谢 赛古

【问题讨论】:

  • 也许你可以给我们看一些代码?
  • 那叫阻塞,不是死循环。无限循环会消耗 CPU 时间,而阻塞不会。

标签: perl


【解决方案1】:

使用 shell 重定向 xyz.pl &lt; input.txt 我相信您是通过 STDIN 提供文件的输入,可以使用 &lt;STDIN&gt; 或菱形运算符 &lt;&gt; 读取。

但是,从文件中读取数据的通用方法是:

用法:

$ xyz.pl input.txt

代码:

use strict;
use warnings;
use ARGV::readonly;

while (<>) {
    # $_ variable contains each line from the file
}

【讨论】:

    【解决方案2】:

    这是因为 input.txt 不会作为参数传递——它可以作为流访问。在下面的示例中,它是“while()”

    http://alumnus.caltech.edu/~svhwan/prodScript/perlGettingInput.html

    #!/bin/sh
    #! -*- perl -*-
    eval 'exec $PERLLOCATION/bin/perl -x $0 ${1+"$@"} ;'
    if 0;
    
    $okayToPrint = 0;
    while (<>) {
        my $currLine = $_;
        if ($currLine eq "WorldBegin\n") {
            $okayToPrint = 1;
        } elsif ($currLine eq "WorldEnd\n") {
            $okayToPrint = 0;
        } else {
            # some line between WorldBegin and WorldEnd
            print $currLine;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2012-12-08
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多