为什么我不能在Perl中实例化POSIX包?

Bel*_*day 0 oop perl posix

我不喜欢这里的东西,我只是在试验.

所以我试过了

#! usr/bin/perl
use warnings;
use strict;
use POSIX;
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

my $point = bless {}, 'POSIX';
print $point->strftime("%A, %B %d, %Y", @time); 
Run Code Online (Sandbox Code Playgroud)

试过那个它给出了错误.

fri*_*edo 6

这不起作用,因为POSIX包中的函数不是设计为对象方法.

当您使用->运算符调用方法时,Perl会在调用者的继承层次结构中找到该方法,然后执行该方法,将调用者作为第一个参数传递.所以

$point->strftime("%A, %B %d, %Y", @time);
Run Code Online (Sandbox Code Playgroud)

相当于:

POSIX::strftime( $point, "%A, %B %d, %Y", @time );
Run Code Online (Sandbox Code Playgroud)

strftime函数不期望在开头有额外的参数,因此它会因标准的XS使用错误而死亡.