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 の値を取得しても、「シートが未定義」と印刷されます。
答え1
キーワードはmy
ローカル変数を宣言します。したがって、$workbook
次の本文の一部ですif
。
if($yes eq "y")
{
my $workbook = 1;
}
$workbook
if
最初の範囲のように宣言し、my $workbook
新しい変数()を宣言せずにif
orブロックelsif
内に割り当てることで、目的の範囲を取得できます$workbook = $parser->parse ...
。
いくつかの追加:
変数が確実に割り当てられることを明確にするために、条件付きコードを記述することをお勧めします。したがって、代わりに
if (c) { $w = e } elsif (c') { $w = e' }
作成しますif (c) { $w = e } else { $w = e' }
。Perl asを呼び出すことで、
perl -w
一般的なuse strict;
エラーに関するより良い警告を受け取ることができます。特にこれを行うと、すべての変数を宣言する必要があり、$workbook
最後のセクションif
のまだ定義されていないことがわかります。私の意見では、このプログラムは非対話型の方が良いでしょう。 2つの名前を要求して1つを無視する代わりに、使用するファイルの名前を引数として使用できます。