0

我有一个创建文件的 Perl 子例程,如下所示:

sub createFile {
    if (open (OUTFILEHANDLE, ">$fileName")) {
        print OUTFILEHANDLE "$desiredVariable\n";
    }
    close(OUTFILEHANDLE);
}

其中 $fileName 和 $desiredVariable 之前已定义。我调用它,然后调用以下子例程,该子例程从文件中读取,获取第一(唯一)行,并将其保存到变量 $desiredVariable 中:

sub getInfoFromFile {
    if (existFile($fileName)) {
        if (open (READFILEHANDLE, "<$fileName")) {
            my @entire_file=<READFILEHANDLE>; # Slurp
            $desiredVariable = $entire_file[0];
            chop $desiredVariable;
            close(READFILEHANDLE);
        }
    }
}

如果我省略“chop”行,$desiredVariable 就是我想要的,但尾随空格换行符。如果我包含“chop”行,则 $desiredVariable 是一个空字符串。出于某种原因,“chop”正在杀死整个字符串。我已经尝试过它$desiredVariable =~ s/\s*$//;和其他几个字符串操作技巧。

我究竟做错了什么?

4

1 回答 1

0

您包含的代码不会重现该问题。我猜它在你匿名化时不知何故在翻译中丢失了。我按如下方式运行脚本,我所做的唯一调整是-f代​​替existsFile().

#!/usr/bin/perl

sub createFile {
    if (open (OUTFILEHANDLE, ">$fileName")) {
        print OUTFILEHANDLE "$desiredVariable\n";
    }
    close(OUTFILEHANDLE);
}

sub getInfoFromFile {
    if (-f $fileName) {
        if (open (READFILEHANDLE, "<$fileName")) {
            my @entire_file=<READFILEHANDLE>; # Slurp
            $desiredVariable = $entire_file[0];
            chop $desiredVariable;
            close(READFILEHANDLE);
        }
    }
}

$fileName = "test.txt";
$desiredVariable = "Hello World!";

createFile();
$desiredVariable = "";
getInfoFromFile();

print "Got '$desiredVariable'\n"; # Got 'Hello World!'
于 2013-08-14T20:43:03.533 回答