如何将特定的数组值分配给$ skip? 我将从特定行开始从a.txt或b.txt中读取(a.txt为88,b.txt为64)
#!/usr/bin/perl
# Libraries
use strict;
use warnings;
# Main script
my @filename = ('a.txt', 'b.txt');
my @nrows = ('88', '64');
foreach my $file_input(glob("*.txt")) {
open my $fh, '<', $file_input or die "can't read open $IN_FILE";
for my $i (0 .. $#nrows) {
if ( $file_input eq $filename[$i] ) {
my $skip = $nrows[$i];
}
}
$/ = "\n\n"; # record separator
while( <$fh> ) {
next unless '$skip' .. undef;
my @lines = split /\n\n/;
**... some manipulations ...**
}
close ($fh);
}
我收到以下错误:
Use of uninitialized value $skip in concatenation (.) or string at ./exercise.n24.pl line 14, <$fh> chunk 11.
最近4个小时我做了很多测试,但我不知道哪里错了
答案 0 :(得分:3)
在这里我可以看到几个明显的错误。
您在立即结束的程序段中声明$skip
。
if ( $file_input eq $filename[$i] ) {
my $skip = $nrows[$i];
}
所以您永远看不到$skip
的值。
然后,当您尝试访问$skip
时,请将其放在单引号中。而且变量不会用单引号引起来,因此Perl只是将其视为五个字符$
,s
,k
,i
和p
。 / p>
但是我不认为这些都能解释您所看到的错误。示例代码中的哪一行是第14行。
如果您给我们提供了一个我们可以运行的代码示例,那么对我们而言,它就更加有用了。
我建议使用另一种方法,但恐怕还不清楚您要做什么。
答案 1 :(得分:1)
您得到的错误是因为在您的代码中,您试图在声明范围之内使用$skip
。
但是从更广泛的意义上来说,您似乎只是想根据文件名跳过一定数量的行。您应该为此使用哈希而不是并行数组。
use strict;
my %lines_to_skip = (
'a.txt' => 88,
'b.txt' => 64
);
for my $file (glob("*.txt")) {
my $skip = $lines_to_skip{$file};
open my $fh, '<', $file;
# local $/ = "\n\n"; # note that this would read the file in paragraph mode
while (<$fh>) {
next unless $. > $skip;
# do something
}
}