我使用Eclipse结合EPIC来编写我的 Perl 代码。我将 EPIC 配置为使用带有“ -pbp ”(perl 最佳实践风格)的 Perltidy 来格式化我的代码。
这在使用Method::Signatures的命名参数时效果不佳。例如,func (:$arg1, : $arg2)
被格式化为func (: $arg1, : $arg2)
产生错误。
此外,func
无法识别关键字,sub
因此缩进是错误的。
您可以使用前置和后置过滤器修改 perlcritic 脚本。更改日志提供了以下示例
Perl::Tidy::perltidy(
prefilter => sub { $_ = $_[0]; s/^method (.*)/sub $1 \#__METHOD/gm; return $_ },
postfilter => sub { $_ = $_[0]; s/^sub (.*?)\s* \#__METHOD/method $1/gm; return $_ }
);
Perlcritic 现在将method
被视为sub
格式化目的。我们可以对func
. 我修改了我的 /usr/local/bin/perlcritic 以使用func
如下:
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; # not running under some shell
package main;
use Perl::Tidy;
my $arg_string = undef;
# give Macs a chance to provide command line parameters
if ($^O =~ /Mac/) {
$arg_string =
MacPerl::Ask( 'Please enter @ARGV (-h for help)',
defined $ARGV[0] ? "\"$ARGV[0]\"" : "" );
}
Perl::Tidy::perltidy(
argv => $arg_string,
prefilter => sub { $_ = $_[0]; s/\W\Kfunc\((.*)/sub($1 \#__FUNC/gm; return $_ },
postfilter => sub { $_ = $_[0]; s/\W\Ksub\((.*?)\s* \#__FUNC/func($1/gm; return $_ }
);
Perl::Tidy/perltidy 不使用 PPI,它比 PPI 早了大约 9 年( http://sourceforge.net/projects/perltidy/说注册时间:2000-12-23)
您不能,除非您制作PPI
,这是 Perltidy 在其大部分工作中使用的,了解各种签名模块,例如MooseX::Method::Signatures
、Method::Signatures::Simple
或Method::Signatures
.
一个合理的解决方法可能是不在您的所有代码上运行 Perltidy,而只在您刚刚编写并希望以某种方式格式化的代码块上运行。这样,您可以轻松地跳过在任何方法签名上运行它并让它只处理方法体。
与此同时,CPAN 上有一个新模块可以解决这个问题。它被调用Perl::Tidy::Sweetened
并提供脚本perltidier
。
它也使用prefilter
和的postfilter
钩子Perl::Tidy
,但你不需要自己关心。