如何将Perl脚本的输出重定向到%TEMP%中的另一个文件?

时间:2011-04-07 08:41:19

标签: perl

我在Windows上需要一个Perl脚本,它从文件中删除换行符并将所有行合并为一行,然后将另一个文件写入Windows系统上的%temp%目录。例如,此脚本用于删除换行符并创建一行并写入%TEMP%中的另一个文件。

我有删除换行符的脚本,但输出转到STDOUT。我无法在%TEMP%中创建文件并将输出重定向到该文件。

以下是我的脚本无效:

my $inFile = $ARGV[0];
$ENV{'TEMP'} = 'C:\\TEMP';

if ($inFile eq "") {
    print "Input file is missing\n";
    print "perl file_into_one_line.pl <input fil>\n";
    exit 0;
}

open(INFILE, "< $inFile") || die "$0, FEJL: can't open $inFile: $!";
foreach (<INFILE>) {
    chomp;
    if (eof()) {    # check for end of last file
        print "$_\n";
    } else {
        open FILE, ">$ENV{'TEMP'}//temp//tst.txt" or die;
        print FILE "${_}$separator";
    }
}

close(INFILE);

2 个答案:

答案 0 :(得分:1)

请注意,%TEMP%是用于访问环境变量的DOS语法。您可以通过%ENV哈希访问perl中的环境变量值,如下所示:

$ENV{k}

其中k是一个字符串表达式,给出变量的名称。在Windows命令行中尝试:

perl -e "print $ENV{'TEMP'};"

你应该可以从这里开始休息。

答案 1 :(得分:0)

脚本应为:

my $separator = " "; # I think you should have this some where~~~

my $inFile = $ARGV[0];
$ENV{'TEMP'} = 'C:\\TEMP';

if ($inFile eq "") {
    print "Input file is missing\n";
    print "perl file_into_one_line.pl <input fil>\n";
    exit 0;
}

open(INFILE, "< $inFile") || die "$0, FEJL: can't open $inFile: $!";
open FILE, ">$ENV{'TEMP'}\\tst.txt" or die $!;
foreach (<INFILE>) {
    chomp;
    print FILE "${_}$separator";
}

print FILE "\n";

close(INFILE);
close(FILE);