Próbuję zrozumieć zakres zmienny i poprawnie zadeklarować zmienne w Perlu, i mam trudny czas.Jak poprawnie zadeklarować zmienne globalne w Perlu?
Poniższy kod zasadniczo czyta plik excel, analizuje go i wypycha go do nowego pliku programu Excel.
Jednak próbuję odczytać jeden z nagłówków, a jeśli nagłówek pasuje do mojego ciągu, chcę zapisać ten numer kolumny i użyć go później w kodzie.
Otrzymuję "Użyj niezainicjowanej wartości $ nazwa_strony_col w druku na linii ./parser.pl 38."
Linia 38 to "print $ nazwa_strony_col;"
Zdaję sobie sprawę, że to polecenie print znajduje się poza {}, gdzie początkowo zainicjowano zmienną, ale zostało zadeklarowane jako zmienna globalna na początku kodu, więc co daje?
#!/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();
Dlaczego nie użyłeś 'my' ?! – ikegami