如何在运行时将参数作为文本文件传递给perl脚本

时间:2011-08-03 11:05:37

标签: perl

我有一个名为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完全不熟悉。所以请让我知道我必须传递给系统命令的命令。

谢谢,

塞古 谢谢 塞古

2 个答案:

答案 0 :(得分:2)

使用shell重定向xyz.pl < input.txt我相信您通过STDIN从文件中提供输入,可以使用<STDIN>或菱形运算符<>读取。

但是,从文件读取数据的一般方法是:

<强>用法:

$ xyz.pl input.txt

<强>代码:

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

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

答案 1 :(得分:1)

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

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;
    }
}