gpt4 book ai didi

perl - 使用中间变量访问电子表格::Read sheets时出错

转载 作者:行者123 更新时间:2023-12-02 10:50:46 27 4
gpt4 key购买 nike

我不是Perl的专家,想知道为什么第一种获取numSheets的方法还可以,而以下方法却不可行:

use Spreadsheet::Read;
my $spreadsheet = ReadData("blah.xls");
my $n1 = $spreadsheet->[1]{sheets}; # okay
my %sh = %spreadsheet->[1]; # bad
my $n2 = $sh{label};

最后一行的下一行给出了错误
Global symbol "%spreadsheet" requires explicit package name at newexcel_display.pl line xxx

我很确定我有正确的签名;如果我做实验,我只会得到不同的错误。我知道电子表格是对数组的引用,而不是对数组的直接引用。我不了解元数据或单个工作表的哈希,但是尝试不同的假设无济于事(至少使用我的Perl技巧)。

我对Spreadsheet::Read的引用是 http://search.cpan.org/perldoc?Spreadsheet::Read。如果在线上有很好的示例显示如何正确使用Spreadsheet,我想知道它们在哪里。

最佳答案

这不是很好,因为它不是有效的Perl语法。原因是因为那不是Larry定义他的语言的方式。

变量前面的信号告诉您您要执行的操作,而不是变量的类型。 $表示单个项目,例如$scalar,但也表示对聚合的单个元素访问,例如$array[0]$hash{$key}。不要使用信号来强制类型。 Perl 5不会那样做。

在您的情况下,$spreadsheet是一个数组引用。 %spreadsheet变量是一个命名的哈希,是一个完全独立的变量,与具有相同标识符的所有其他变量无关。 $foo@foo%foo来自不同的 namespace 。由于您尚未声明%spreadsheet,strict会引发您看到的错误。

看来您想从$spreadsheet->[1]获取哈希引用。所有引用都是标量,因此您要分配给标量:

 my $hash_ref = $spreadsheet->[1];

一旦在标量中具有哈希引用,就可以对其取消引用以获取其值:
 my $n2 = $hash_ref->{sheets};

这是我们在 Intermediate Perl的第一部分中介绍的内容。

关于perl - 使用中间变量访问电子表格::Read sheets时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com