是什么导致在Perl for循环中声明$ value的错误?

我正在编写代码以解析自动生成的excel报告的销售信息。我能够从每个单元格中提取数据一行并将其打印到文本文件中。当我尝试循环读取行时,问题开始了。电子表格已设置有其他所有单元格上的数据。我试图创建一个for循环来增加单元格,但会出错。

syntax error at C:\taylor\perl\test_parse.pl line 128,near ")
                my "
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"?) at C:\taylor\perl\test_parse.pl line 128.
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"?) at C:\taylor\perl\test_parse.pl line 129.
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"?) at C:\taylor\perl\test_parse.pl line 168.
Execution of C:\taylor\perl\test_parse.pl aborted due to compilation errors."

我希望将变量移出if块的范围,但不确定是否可行。

#!/usr/bin/perl 

use warnings;
use strict;
use Spreadsheet::ParseXLSX;
use Spreadsheet::ParseExcel;
use Spreadsheet::XLSX;
use Date::Format;

my $filename = "c:/taylor/perl/DCS8.xlsx";
my $files = "C:\\Taylor\\perl\\imports.csv";

#Parse excel file

my $parser = Spreadsheet::ParseXLSX->new();
my $workbook = $parser->parse("$filename");

for (my $i=0; $i <= 200; $i+=2) {
my $worksheet1 = $workbook->worksheet('Sheet1');
    my $a = $worksheet1->get_cell(15+$i,0);
    my $d = $worksheet1->get_cell(15+$i,3);
    my $f = $worksheet1->get_cell(15+$i,5);
    my $h = $worksheet1->get_cell(15+$i,7);
    my $j = $worksheet1->get_cell(15+$i,9);
    my $l = $worksheet1->get_cell(15+$i,11);
    my $n = $worksheet1->get_cell(15+$i,13);
    my $p = $worksheet1->get_cell(15+$i,15);
    my $r = $worksheet1->get_cell(15+$i,17);
    my $t = $worksheet1->get_cell(15+$i,19);
    my $v = $worksheet1->get_cell(15+$i,21);
    my $x = $worksheet1->get_cell(15+$i,23);
    my $z = $worksheet1->get_cell(15+$i,25);
    my $ab = $worksheet1->get_cell(15+$i,27);
    my $af = $worksheet1->get_cell(15+$i,29);
    my $ah = $worksheet1->get_cell(15+$i,31);
    my $aj = $worksheet1->get_cell(15+$i,33);
    my $ao = $worksheet1->get_cell(15+$i,35);

if (( defined $a and $a->value() ne "")
    or ( defined $d and $d->value() ne "")
    or ( defined $f and $f->value() ne "")
    or ( defined $h and $h->value() ne "")
    or ( defined $j and $j->value() ne "")
    or ( defined $l and $l->value() ne "")
    or ( defined $n and $n->value() ne "")
    or ( defined $p and $p->value() ne "")
    or ( defined $r and $r->value() ne "")
    or ( defined $t and $t->value() ne "")
    or ( defined $v and $v->value() ne "")
    or ( defined $x and $x->value() ne "")
    or ( defined $z and $z->value() ne "")
    or ( defined $ab and $ab->value() ne "")
    or ( defined $af and $af->value() ne "")
    or ( defined $ah and $ah->value() ne "")
    or ( defined $aj and $aj->value() ne "")
    or ( defined $ao and $ao->value() ne ""))

        my $value = $a->value();
        $value =~ s/[_,-]//g;
        my $value2 = $d->value();
        $value2 =~ s/[_,-]//g;
        my $value3 = $f->value();
        $value3 =~ s/[_,-]//g;
        my $value4 = $h->value();
        $value4 =~ s/[_,-]//g;
        my $value5 = $j->value();
        $value5 =~ s/[_,-]//g;
        my $value6 = $l->value();
        $value6 =~ s/[_,-]//g;
        my $value7 = $n->value();
        $value7 =~ s/[^a-zA-Z0-9,]//g;
        my $value8 = $p->value();
        $value8 =~ s/[_,-]//g;
        my $value9 = $r->value();
        $value9 =~ s/[_,-]//g;
        my $value10 = $t->value();
        $value10 =~ s/[_,-]//g;
        my $value11 = $v->value();
        $value11 =~ s/[_,-]//g;
        my $value12 = $x->value();
        $value12 =~ s/[_,-]//g;
        my $value13 = $z->value();
        $value13 =~ s/[_,-]//g;
        my $value14 = $ab->value();
        $value14 =~ s/[_,-]//g;
        my $value15 = $af->value();
        $value15 =~ s/[_,-]//g;
        my $value16 = $ah->value();
        $value16 =~ s/[^a-zA-Z0-9,]//g;
        my $value17 = $aj->value();
        $value17 =~ s/[^a-zA-Z0-9,]//g;
        my $value18 = $ao->value();
        $value18 =~ s/[^a-zA-Z0-9,]//g;

my $files = "C:\\Taylor\\perl\\imports.csv";
unlink ($files);
open (OUTFILE,">>$files"); 
print OUTFILE "$value,$value2,$value3,$value4,$value5,$value6,$value7,$value8,$value9,$value10,$value11,$value12,$value13,$value14,$value15,$value16,$value17,$value18\n";
}

理想情况下,这将遍历get单元每次添加2行的循环,而似乎在循环开始时会中断。

zyf12345678 回答:是什么导致在Perl for循环中声明$ value的错误?

评论中已经给出了解决方案,但是对于将来遇到此问题的其他人来说,这可能有助于使其更加清晰。

代码包含一个if语句,其编写如下(大量简化):

if ($some_condition) 
  # do something

但是在Perl中,附加到if语句的代码必须在代码块中。所以应该这样写:

if ($some_condition) {
  # do something
}
本文链接:https://www.f2er.com/3121703.html

大家都在问