我正在读取文件中的行并将其输入到命令中。
.c
我想将每个输出存储到数组中。但无法存储它,它会覆盖以前的值
答案 0 :(得分:3)
open my $handle, '<', $path_to_file;
foreach $line (<$handle>) {
my @output = `cmd`;
} # I added this closing brace.
你有几个问题。
首先,每次循环时,您都会声明一个新的空@output
实例。所以在循环之外声明变量。
my @output;
open my $handle, '<', $path_to_file;
foreach $line (<$handle>) {
@output = `cmd`;
}
但这里仍然存在问题。你在循环的每次迭代中都覆盖了整个@output
。您想将数据添加到@output
的末尾。因此,不应该为数组赋值,而应该push()
在数组末尾添加一个新元素。
my @output;
open my $handle, '<', $path_to_file;
foreach $line (<$handle>) {
push @output, `cmd`;
}
更新:正如Borodin在评论中指出的那样,push()
会在反引号上强加列表上下文,因此他们会返回一个列表,其中每个元素都是来自输出的单行你的命令。您可能希望通过确保每次执行命令返回单个字符串(可能包含嵌入的换行符)来驯服该行为:
push @output, scalar `cmd`;
或者创建一个二维数组,其中@array
的每个元素都是对另一个数组的引用,该数组包含单次执行命令的所有输出行:
push @output, [ `cmd` ];