我有一个创建文件的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就是我想要的,但是带有一个尾随的 space 换行符。如果我包含“chop”行,$ desiredVariable是一个空字符串。由于某种原因,“砍”正在杀死整个字符串。我已经尝试了$desiredVariable =~ s/\s*$//;
和其他一些字符串操作技巧。
我做错了什么?
答案 0 :(得分: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!'