我习惯于在OO中使用$self,即使我只是编写自带的脚本,而根本没有命名我的包。例如,我的script.pl应该这样开头:
use strict;
use warnings;
my $self = bless {};
$self->time_stamp(localtime(time()));
1;
sub time_stamp {
my ($self,@args) = @_;
# Getter/setter
my $ftime_stamp;
if( 1 < scalar @args ) {
$ftime_stamp = strftime "%Y%m%d_%H%M%S", @args;
$self->{'time_stamp'} = $ftime_stamp;
}
return $self->{'time_stamp'};
}
[...]这些脚本有时会变成适当的模块,但有时我只是让它们成为正确的模块。
然而,这与Perl对“单参数祝福”的批评相悖:
One-argument "bless" used at line 162, column 12. See page 365 of PBP. Severity: 5是否有一种清洁的方式来命名我的祝福,但仍然包含在我的script.pl中。
发布于 2014-02-05 10:09:09
不是所有被评审团批评的东西都必须固定下来。但是通常情况下,最好指定bless的包名。
如果不声明包名,则代码隐式地在package main中。如果您不关心实际名称,并且希望引用当前包,请使用__PACKAGE__符号,例如:
my $self = bless {} => __PACKAGE__;你也可以写一点样板:
sub new {
my ($class) = @_;
return bless {} => $class;
}
my $self = __PACKAGE__->new;或者您可以使用像Moo这样的对象系统
use Moo;
has _time_stamp => (is => 'rw');
sub time_stamp {
my ($self, @args) = @_;
if( 1 < scalar @args ) {
$self->_time_stamp(strftime "%Y%m%d_%H%M%S", @args);
}
return $self->_time_stamp;
}
my $self = __PACKAGE__->new; # a "new" is autogenerated发布于 2014-02-05 10:03:05
您可以创建自己的Perl批评者策略,并将批评者配置为使用该策略而不是默认设置。Perl::Critic::Policy::ClassHierarchies::ProhibitOneArgBless是要禁用的规则。但是,在大多数情况下,如果希望使用该规则,则可以在源中使用##no critic标记来禁用该特定行的批判性。
见审稿文献。
https://stackoverflow.com/questions/21573801
复制相似问题