Ich versuche den Variablenbereich zu verstehen und Variablen in Perl richtig zu deklarieren, und ich habe es schwer.Wie deklariert man globale Variablen in Perl richtig?
Der folgende Code liest grundsätzlich eine Excel-Datei ein, analysiert sie und spuckt sie in eine neue Excel-Datei aus.
Ich versuche jedoch, einen der Header zu lesen, und wenn der Header mit meiner Zeichenfolge übereinstimmt, möchte ich diese Spalte Nummer aufzeichnen und später im Code verwenden.
Ich bekomme eine "Verwendung von nicht initialisierten Wert $ site_name_col im Druck bei ./parser.pl Zeile 38."
Zeile 38 ist "print $ site_name_col;"
Ich weiß, dass diese print-Anweisung außerhalb der {} ist, wo die Variable anfänglich initialisiert wurde, aber am Anfang des Codes als globale Variable deklariert wurde. Was also gibt es?
#!/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();
Warum hast du 'my' nicht benutzt ?! – ikegami