我正在尝试理解变量范围并在 Perl 中正确声明变量,但我遇到了困难。
下面的代码基本上是读入一个 excel 文件,对其进行解析,然后将其输出到一个新的 excel 文件中。
但是,我正在尝试读取其中一个标题,如果标题与我的字符串匹配,我想记录该列号,并稍后在代码中使用它。
我在 ./parser.pl 第 38 行收到“使用未初始化值 $site_name_col in print”。
第 38 行是“打印 $site_name_col;”
我意识到这个打印语句在最初初始化变量的 {} 之外,但它在代码开头被声明为全局变量,那么给出了什么?
#!/usr/bin/perl -w
use strict;
use warnings;
use vars qw($site_name_col);
use Spreadsheet::WriteExcel;
use Spreadsheet::ParseExcel;
my ($fname1) = @ARGV;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse($fname1);
my $new_workbook = Spreadsheet::WriteExcel->new('formated_list.xls', $fname1);
if (!defined $workbook) {
die $parser->error(), ".\n";
}
for my $worksheet ( $workbook->worksheets() ) {
my ($wsheet_name) = $worksheet->get_name();
my $new_worksheet = $new_workbook->add_worksheet($wsheet_name);
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min .. $row_max) {
for my $col ($col_min .. $col_max) {
my $cell = $worksheet->get_cell($row, $col);
next unless $cell;
print "Row, Col = ($row, $col)\n";
if ( $cell->value() =~ /Site Name/ ) {
$site_name_col = $col;
}
print $site_name_col;
$new_worksheet->write($row, $col, $cell->value());
}
}
}
$new_workbook->close();