use PDF::Extract;
$pdf=new PDF::Extract( PDFDoc=>"test.pdf");
$i=1;
$i++ while ( $pdf->savePDFExtract( PDFPages=>$i ) );
我试图理解上面的Perl代码。它似乎是从模块中实例化一个对象。调用构造函数的行中的参数是什么? =>
是什么意思?它是一个哈希参数吗?
答案 0 :(得分:5)
构造函数是通过间接对象语法调用的,不鼓励(通常是旧代码的符号)。最好写成:
my $pdf = PDF::Extract->new(...);
perlobj文档建议您避免使用间接对象语法,原因如下:
首先,阅读可能令人困惑。在上面的例子中,它不是 如果
save
是File
类提供的方法,或者仅仅是{ 期望文件对象作为其第一个参数的子例程。与类方法一起使用时,问题更严重。因为Perl 允许子程序名称被写为裸字,Perl必须猜测 方法之后的裸字是类名还是子程序 名称。换句话说,Perl可以将语法解析为
File->new( $path, $data )
或new( File( $path, $data ) )
。
要回答你的第二个问题,=>
被称为胖逗号,而perlop对此有这样的说法:
=>
运算符(有时发音为“fat逗号”)是其同义词 逗号除了它导致左边的单词被解释 作为字符串,如果它以字母或下划线开头并组成 只有字母,数字和下划线。这包括操作数 否则可能被解释为运算符,常量,单个数字 v字符串或函数调用。如果对此行为有疑问,请左侧 操作数可以明确引用。否则,
=>
运算符的行为与逗号运算符或 列表参数分隔符,根据上下文。
在您的示例代码中,构造函数接收一个列表,就像您使用了普通的逗号一样。实际上,您的代码等同于:
my $pdf = PDF::Extract->new('PDFDoc', 'test.pdf');
然而,创建哈希的东西是另一方的赋值,可能看起来像这样:
sub new {
my $class = shift;
my %args = @_;
# ...
}
fat逗号不是专门用于散列(也不是初始化散列所必需的,正如我在上面指出的那样),但是你通常会在参数列表中的键/值关联的任何地方看到它。角色的形状清楚地表明“这与此有关”。它还节省了一些引号字符的输入,这是一个很好的附带好处。