大佬教程收集整理的这篇文章主要介绍了perl – 使用内联包继承常量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#!/usr/bin/perl use Strict; use warnings; package Car; use Exporter qw( import ); our @EXPORT_OK = ( 'WHEELS','WINGS' ); use constant WHEELS => 4; use constant WINGS => 0; sub new { my ( $class,%args ) = @_; my $self = { doors => $args{doors},colour => $args{Colour},wheels => WHEELS,wings => WINGS,}; bless $self,$class; return $self; } package Car::Sports; use base qw( Car ); sub new { my ( $class,ENGIne => $args{ENGInE},$class; return $self; } package main; my $obj = Car->new( doors => 4,colour => "red" ); print Dumper $obj; my $obj2 = Car::Sports->new( doors => 5,ENGIne => "V8" ); print Dumper $obj2; __END__
错误是:
Bareword "WHEELS" not allowed while "Strict subs" in use at ./t.pl line 30. Bareword "WINGS" not allowed while "Strict subs" in use at ./t.pl line 30. Execution of ./t.pl aborted due to compilation errors.
现在,我没有做过一些研究而没有来这里发帖.我知道一个选择是在Car :: Sports中使用Car qw(WHEELS WINGS).但是,如果我这样做,我会收到以下错误,因为这些类都在同一个文件中内联:
Can't locate Car.pm in @INC
出于各种原因,我需要将我的包保存在一个文件中.有没有解决的办法?由于常量基本上只是subs,为什么我必须导入它们,而对于普通方法则不一样?
最后,我也知道我可以这样做:
package Car::Sports; use base qw( Car ); sub new { my ( $class,wheels => Car::WHEELS,wings => Car::WINGS,$class; return $self; }
它很好……但我有许多类,并希望使常量的继承更通用,必须明确地命名父类(有时它不仅仅是父类,而是祖父母).
非常感谢任何指针!
干杯
package Car::Sports; use base qw( Car ); Car->import(qw(WHEELS WINGS));
并使用Car :: Sports构造函数中的sigils:
... wheels => &WHEELS,wings => &WINGS,...
您的Car类在运行时之前未定义其@EXPORTS_OK列表.这些符号是必需的,因为Car :: Sports构造函数在编译时被解析,编译器不知道Car :: Sports命名空间中应该有WHEELS和WINGS符号.
避免这些印记的唯一方法是在编译时定义Car的导出:
package Car; our @EXPORT_OK; BEGIN {@EXPORT_OK = qw(WHEELS WINGS)} # set at compile not run time ... package Car::Sports; use base qw(Car); BEGIN {Car->import('WHEELS','WINGS')} # import before c'tor is parsed
您还可以通过在其自己的Car.pm文件中定义Car类来避免这些阴谋.然后你会说
use Car qw(WHEELS WINGS);
并且Car.pm文件中的所有内容都将在编译时进行解析,并且Exporter :: import方法(通过调用Car :: import触发)将自动运行并将所需的符号导入当前的命名空间.
以上是大佬教程为你收集整理的perl – 使用内联包继承常量全部内容,希望文章能够帮你解决perl – 使用内联包继承常量所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。