首页 > 解决方案 > 将从文本文件读取的行存储到 Perl 脚本中的变量

问题描述

我正在寻找以下情况的解决方案。

我需要从我的 Perl 脚本 disconnect.pl 中读取 task.txt 文件,并且我必须将文件的内容保存到我可以在我的 Perl 脚本中的多个位置使用的变量中。

Task.txt 文件包含用逗号分隔的单引号中的单词,但在一行中,如下所示

'qbc','456','sdf','fgh'

#########################
my $filename = 'testing_folder/text_document.txt';
open(FH, '<', $filename) or die $!;
while(<FH>){
$content=$_
}
print "$content"
my $ql = "select in ($content)";
print "$ql"
###############################

它在线上给出错误my $ql

标签: perl

解决方案


我将您的代码放入一个名为“line”的文件中并尝试运行它。这是发生的事情:

$ perl line
syntax error at line line 8, near "my "
Execution of line aborted due to compilation errors.

正如你所说,第 8 行是这一行:

my $ql = "select in ($content)";

但这里有一个关于编译器错误消息的小秘密——它们并不像我们希望的那样聪明。您将看到的一个常见问题是他们经常在错误的行上报告错误。因此,在报告错误之前检查一两行总是值得的。

在这种情况下,问题出在上一行:

print "$content"

你现在能看到吗?仔细查看该行的末尾。你看到有什么遗漏吗?

Perl 语句用分号分隔。换行符(通常)对 Perl 编译器没有任何意义。Perl 很乐意让您将语句分散到两行或多行。因此,当遇到末尾没有分号的行时,它只是假设下一行是同一语句的延续。

这意味着当您编写时:

print "$content"
my $ql = "select in ($content)";

Perl 将其视为一个声明:

print "$content" my $ql = "select in ($content)";

这是一个没有意义的声明。所以编译器会报错。

这也解释了为什么错误报告是一条线。Perl 在有问题的语句末尾报告错误。

哦。如果我不清楚 - 你需要在该行的末尾加一个分号。


推荐阅读