我使用vim与Ale插件。默认情况下,perlcritic违规显示为错误。我希望看到它们显示为警告。据:help g:ale_type_map我应该能够做到这一点,但我不清楚具体如何。
let g:ale_type_map = {'perl': {'E': 'W'}}会将perl错误变成警告。
let g:ale_type_map = {'perl': {'ES': 'WS'}}似乎对批评者的违规没有任何影响。这些都不是:
let g:ale_type_map = {'perlcritic': {'ES': 'WS', 'E': 'W'}}
let g:ale_type_map = {'perl_perlcritic': {'ES': 'WS', 'E': 'W'}}
Run Code Online (Sandbox Code Playgroud)
有关此文档的文档非常稀疏,所以我不清楚这是否与语法,林特名称或其他完全有关。
一个arisdottle是::并且可以在运行prove以执行 Perl 测试时使用。的文档prove指出:
It is possible to supply arguments to tests. To do so separate them from
prove's own arguments with the arisdottle, '::'. For example
prove -v t/mytest.t :: --url http://example.com
would run t/mytest.t with the options '--url http://example.com'. When
running multiple tests they will each receive the same arguments.
Run Code Online (Sandbox Code Playgroud)
我对这个词的起源很感兴趣。谷歌很难。我在 irc.perl.org 上的 #toolchain 中提出了问题,但我还没有得到具体的答案。由于历史原因,我认为在此处记录该术语会有所帮助。
以这个简单的测试用例为例:
#!/usr/bin/env perl
use Test::Most;
use Scalar::Util qw( reftype );
ok( 1, 'foo' );
done_testing();
Run Code Online (Sandbox Code Playgroud)
运行这个测试给了我以下输出:
原型不匹配:sub main::reftype: none vs ($) at /Users/olaf/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/Exporter.pm 第 66 行。
有两种方法可以消除此警告。
我可以调用 Scalar::Util::reftype(甚至使用另一个模块),但我正在寻找调试此问题的一些帮助,以便我可以提交适当的错误报告,因为我不确定至于警告的根本原因在哪里。
我想知道Perl中是否有任何选项来构建包含我想要的模块的本地CPAN存储库,然后使用Perl分发重新分发它,然后根本不需要访问CPAN.
如果是的话,我可以展示一些例子吗?
我看了CPAN并找到了一个mincpan,但似乎minicpan带来了CPAN的所有镜像.如果可以使用minicpan只带来一个特定的模块子集,并且如果我有一个存储库,是否可以将它复制到另一个具有相同类型的操作系统并在那里安装相关模块而不会头疼?
我理想的是能够做的是扫描一堆隐含导入一堆函数的文件Test::Most.我想显式导入文件中的函数.所以基本上我会检查use语句,看看它们是否已经存在,如果不存在,我想为相关函数添加一个额外的用法语句.例如,use Test::Differences qw( eq_or_diff );如果eq_or_diff文件中有一个,我可能会添加,但是没有use Test::Differences.它会变得更复杂,但这是基本的想法.
作为概念证明,我试图在现有脚本中添加一个单词,但我无法弄明白.insert_after()成功时返回true.我只得到一个false值,但我没有看到任何关于无法添加行的调试信息.
use strict;
use warnings;
use PPI::Document ();
use PPI::Token::Word ();
use Test::More;
my $script = <<'EOF';
use strict;
use warnings;
use DateTime ();
use Git::Helpers qw( checkout_root );
use LWP::UserAgent ();
my $foo = 'bar';
EOF
my $doc = PPI::Document->new( \$script );
my $includes = $doc->find('PPI::Statement::Include');
my @use = grep { $_->type eq 'use' } @{$includes};
my $second_last = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要vim在任意行和任意列中打开文件的模块。我正在通过进行操作exec(),但vim没有获得正确的行和列:
如果我将其简化为单线:
perl -E "exec(q{vim}, q{+'call cursor(1,3)'}, q{README.md})"
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
"README.md" 116L, 3790C
Error detected while processing command line:
E20: Mark not set
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
当vim显示此错误时,ps显示vim +'call cursor(1,3)' README.md,这是我想要的命令。实际上,复制/粘贴vim +'call cursor(1,3)' README.md到新的终端窗口中可以使我获得所需的行为。
在我看来,vim当通过Perl的命令运行命令时,该行是116,而不是1,该列是3790,而不是3 exec()。
这是Perl 5.26.1,Vim 8.1和GNU bash版本3.2.57(1)-发行版(x86_64-apple-darwin18)。