电子表格::ParseExcel

电子表格::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,它也会打印“工作表未定义”。

答案1

关键字my声明局部变量。因此,$workbook是以下主体的局部if

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

$workbook您可以通过在第一个 之前声明 as 来获得您正在寻找的作用域ifmy $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 尚未定义。

  • 在我看来,这个程序最好是非交互式的:它可以只将要使用的文件名作为参数,而不是要求两个名称并忽略一个。

相关内容