perl中的电子表格::ParseExcel模块

perl中的电子表格::ParseExcel模块,perl,Perl,当我处理类和对象时,我总是感到困惑。当我试图理解电子表格::ParseExcel模块时,我对其类和对象有一些疑问: 我的疑问是: 使用$parser=Spreadsheet::ParseExcel->new(),我们正在为电子表格::ParseExcel创建一个对象,然后我们将为电子表格::ParseExcel::工作簿创建一个对象 为什么我们不能直接为电子表格::解析Excel::工作簿创建对象并开始解析 谢谢想想电子表格::ParseExcel和电子表格::ParseExcel::工作簿就像

当我处理类和对象时,我总是感到困惑。当我试图理解
电子表格::ParseExcel
模块时,我对其类和对象有一些疑问:

我的疑问是:

使用
$parser=Spreadsheet::ParseExcel->new()
,我们正在为
电子表格::ParseExcel
创建一个对象,然后我们将为
电子表格::ParseExcel::工作簿
创建一个对象
为什么我们不能直接为
电子表格::解析Excel::工作簿创建对象并开始解析


谢谢

想想
电子表格::ParseExcel
电子表格::ParseExcel::工作簿
就像它们是不同的类型一样,比如整数和字符串,它们都是标量,但是你不能,比如说,将它们相乘,尽管它们在某些情况下可以相互作用。例如,应用于字符串的
length()
为您提供字符串的整数长度。同样,
Spreadsheet::ParseExcel::parse()
为您提供
Spreadsheet::ParseExcel::工作簿
。它们由公共名称空间绑定,但它们完全不同,
电子表格::ParseExcel
是一个解析器,
电子表格::ParseExcel::工作簿
是一个工作簿。

想想
电子表格::ParseExcel
电子表格::ParseExcel::工作簿
就像它们是不同的类型一样,就像整数和字符串一样,它们都是标量,但不能将它们相乘,尽管它们在某些情况下可以相互作用。例如,应用于字符串的
length()
为您提供字符串的整数长度。同样,
Spreadsheet::ParseExcel::parse()
为您提供
Spreadsheet::ParseExcel::工作簿
。它们由公共名称空间绑定,但完全不同,
Spreadsheet::ParseExcel
是解析器,
Spreadsheet::ParseExcel::Workbook
是工作簿

为什么我们不能直接为电子表格::ParseExcel::工作簿创建对象并开始解析

这是一个合理的问题,在旧版本的电子表格::ParseExcel中,有一个
电子表格::ParseExcel::工作簿->Parse()
方法就是这样做的。(*)

用户往往只将Excel文件视为工作簿。但是,文件格式还包含元数据(作者、创建日期等)和vba宏等与工作簿数据分开的数据

因此,解析器与工作簿的逻辑划分可能是由于文件中数据的物理划分

或者,它可能允许报告文件解析错误,而不仅仅是返回未定义的工作簿对象

无论哪种方式,其他人可能会选择不同的界面建模方式,但这正是原作者所选择的。这不是完全直观的,但它是有效的

(*)此方法现在已被弃用,因为它不允许对文件进行错误检查

为什么我们不能直接为电子表格::ParseExcel::工作簿创建对象并开始解析

这是一个合理的问题,在旧版本的电子表格::ParseExcel中,有一个
电子表格::ParseExcel::工作簿->Parse()
方法就是这样做的。(*)

用户往往只将Excel文件视为工作簿。但是,文件格式还包含元数据(作者、创建日期等)和vba宏等与工作簿数据分开的数据

因此,解析器与工作簿的逻辑划分可能是由于文件中数据的物理划分

或者,它可能允许报告文件解析错误,而不仅仅是返回未定义的工作簿对象

无论哪种方式,其他人可能会选择不同的界面建模方式,但这正是原作者所选择的。这不是完全直观的,但它是有效的

(*)此方法现在已被弃用,因为它不允许对文件进行错误检查