Perl

電子表格::ParseExcel

  • March 31, 2015

我正在使用 Spreadsheet::ParseExcel,並希望將文件名作為使用者的輸入。此外,我希望根據使用者提供的條件解析兩個文件。

這是我寫的:

print("Enter the path of the file_y:");
$file_y=<STDIN>;
chomp($file_y);

print("Enter the path of the file_n:");
$file_n=<STDIN>;
chomp($file_n);

print("Enter whether file_y or file_n is required(y/n)?");
$yes=<STDIN>;
chomp($yes);

my $parser = Spreadsheet::ParseExcel->new();
if($yes eq "y")
{
   my $workbook = $parser->parse($file_y);
}
elsif($yes eq "n")
{
   my $workbook = $parser->parse($file_n);
}

if ( !defined $workbook ) {
   die $parser->error(), "Worksheet not defined.\n";

即使 yes 獲取值 y 或 n,它也會列印“工作表未定義”。

關鍵字my聲明局部變數。因此,$workbook是以下主體的局部if

if($yes eq "y")
{
   my $workbook = 1;
}

$workbook您可以通過在第一個if, as之前聲明my $workbook,然後在iforelsif塊內對其進行分配而不聲明新變數 ( $workbook = $parser->parse ...)來獲得您正在尋找的範圍。

還有幾件事:

  • 我建議編寫條件程式碼,以明確保證您的變數被分配,所以if (c) { $w = e } elsif (c') { $w = e' }我會寫而不是if (c) { $w = e } else { $w = e' }.
  • 你可以呼叫 perl asperl -w和 adduse strict;來接收關於常見錯誤的更好警告;$workbook特別是,這會迫使您聲明每個變數,並且會發現最後一個if子句中的 the 尚未定義的事實。
  • 在我看來,這個程序的非互動性會更好:它可以只將要使用的文件名作為參數,而不是要求兩個名稱並忽略一個。

引用自:https://unix.stackexchange.com/questions/193523