Perl
電子表格::ParseExcel
我正在使用 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
,然後在if
orelsif
塊內對其進行分配而不聲明新變數 ($workbook = $parser->parse ...
)來獲得您正在尋找的範圍。還有幾件事:
- 我建議編寫條件程式碼,以明確保證您的變數被分配,所以
if (c) { $w = e } elsif (c') { $w = e' }
我會寫而不是if (c) { $w = e } else { $w = e' }
.- 你可以呼叫 perl as
perl -w
和 adduse strict;
來接收關於常見錯誤的更好警告;$workbook
特別是,這會迫使您聲明每個變數,並且會發現最後一個if
子句中的 the 尚未定義的事實。- 在我看來,這個程序的非互動性會更好:它可以只將要使用的文件名作為參數,而不是要求兩個名稱並忽略一個。