小编bes*_*bov的帖子

为什么Perl函数"map"给出错误"没有足够的地图参数"

这是我不明白的事情.

此脚本正常工作(注意地图功能中的连接):

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %aa = map { 'a' . '' => 1 } (1..3);

print Dumper \%aa;

__END__
output:

$VAR1 = {
          'a' => 1
        };
Run Code Online (Sandbox Code Playgroud)

但是没有连接,地图就不起作用了.这是我希望工作的脚本,但它没有:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %aa = map { 'a' => 1 } (1..3);

print Dumper \%aa;
__END__
output:

Not enough arguments for map at e.pl line 7, near "} ("
syntax error at e.pl line 7, near "} ("
Global symbol "%aa" …
Run Code Online (Sandbox Code Playgroud)

perl dictionary

8
推荐指数
2
解决办法
1018
查看次数

检查本地git repo是否已提交所有内容并推送到master

我有一些shell脚本,我想检查我的一个git repos.我想知道该回购是否已经提交了所有内容以及是否将其推送到掌握.在此测试之前,我进行git fetch以确保我有最新的更改.

我找到了检查repo是否有一些未提交更改的方法:

if ! git --work-tree=$HOME/git/project --git-dir=$HOME/git/project/.git diff-index --quiet HEAD --; then
    echo "Has some changes";
fi
Run Code Online (Sandbox Code Playgroud)

但这不是我唯一需要的东西.我还想确保所有本地提交都被推送到掌握.

最简单的方法是什么?

git

7
推荐指数
3
解决办法
6162
查看次数

如何手动创建TAP输出

每个人都使用一个很棒的Perl模块 Test :: More进行单元测试.这是一个非常简单的脚本t/sample_1.t:

use Test::More tests => 1;

fail('This test fails');
Run Code Online (Sandbox Code Playgroud)

我想编写执行相同操作的脚本,但没有 Test :: More.

我已经阅读了几篇关于TAP(测试任何协议)的文档,以了解如何编写脚本.我读了:

不幸的是文档还不够.我不得不检查使用Test :: More的脚本输出,以找出我需要向STDERR输出诊断信息(文档中没有任何内容).

所以,我编写了一个脚本,它与使用Test :: More脚本的脚本完全相同.这是列表t/sample_2.t:

$| = 1;

print "1..1\n";
print "not ok 1 - This test fails\n";
print STDERR "#   Failed test 'This test fails'\n";
print STDERR "#   at t/sample_1.t line 3.\n";
print STDERR "# Looks like you failed 1 test of 1.\n";

exit 1;
Run Code Online (Sandbox Code Playgroud)

但是当使用prove这两个脚本输出不同的东西时.prove对于不同的测试,"#Failed test'此测试失败'" 行显示在不同的行上.这是截图:

Perl证明了2个样本单元测试的输出

我编写了一个测试脚本,使用 …

perl tap

7
推荐指数
1
解决办法
621
查看次数

应使用什么字符串来指定Perl POD中的编码,"utf8","UTF-8"或"utf-8"?

可以用UTF-8编写Perl文档.要做到这一点,你应该写在你的POD:

=encoding NNN
Run Code Online (Sandbox Code Playgroud)

但你应该写NNN什么呢?不同来源给出不同的答案.

什么是正确的答案?在POD中写入的正确字符串是什么?

documentation perl encoding utf-8

7
推荐指数
1
解决办法
792
查看次数

多个命令在git post-receive中不起作用

我正在使用带有trac的git.推后我想做两件事:

  1. 使用diff向开发团队发送电子邮件
  2. 如果提交消息中有一些特殊短语(如"参见#1"),那么我希望将提交消息放在trac票证中.

第一件事是通过git-commit-notifier解决的.在我创建post-receive hook之后它完美地工作:

#!/bin/sh

/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

我的第二个要求可以在http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts中解释.它也适用于这种后接收挂钩:

#!/bin/sh

/var/trac/testgit/commit-updater

当它们分开时,这两件事都有效.但我需要将它们结合起来.所以我创建了post-receive钩子:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

这很有趣,但这不起作用.单独运行时,命令运行得非常好,但只有第一个在放入后接收挂钩时才能运行.

如果我有这样的钩子:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

我收到以下错误

/var/lib/gems/1.8/gems/git-commit-notifier-0.8.0/bin/git-commit-notifier:12: undefined method `strip' for nil:NilClass (NoMethodError)
        from /var/lib/gems/1.8/bin/git-commit-notifier:19:in `load'
        from /var/lib/gems/1.8/bin/git-commit-notifier:19

但是,如果我改变这两个命令的顺序,我没有收到任何错误,但只有第一个命令工作.

我将不胜感激任何帮助.我试图解决这个问题很长一段时间,我没有想法.

git shell hook trac git-post-receive

6
推荐指数
1
解决办法
1952
查看次数

如何运行perl xt测试?

最近,新的伟大事物出现在Perl世界中.在库包中很长一段时间都有t包含测试的文件夹.现在还有一个xt包含作者测试的文件夹.在xt不需要库安装过程中的测试,但它可以帮助图书馆作者日期,以确保该代码是巨大的.

有一个prove与Perl一起运行测试的spript .如果prove没有参数运行 ,将执行文件夹't'中的所有测试.如果你想同时运行txt测试你应该写:

prove xt t
Run Code Online (Sandbox Code Playgroud)

它可以向配置文件.proverc文件添加参数(xt t).然后,当您在prove没有参数的情况下运行时,它们将从文件中获取,并且将执行两个文件夹中的测试.

但问题来了.如果你xt t.proverc文件中有文件,你不能只将文件名作为参数传递给prove.如果你说 prove t/00-load.t它将执行两个文件夹中的所有测试,因为它从配置文件中获取参数.你需要写prove --norc t/00-load.t.但这看起来很难看.

你如何运行xt测试?

perl xt perl-prove

6
推荐指数
1
解决办法
833
查看次数

为什么Perl认为`1和0'是真的?

这是样本.出于一些奇怪的原因,Perl认为这1 and 0是一个真正的价值.为什么?

$ perl -e '$x = 1 and 0; print $x;'
1
Run Code Online (Sandbox Code Playgroud)

perl boolean

6
推荐指数
3
解决办法
239
查看次数

Perl CPAN字典

在Perl世界中有一个叫CPAN的好东西.它是开源Perl库的一个大存储.

我使用CPAN的模块,我自己发布了几个发行版.

我使用CPAN,但有一件我不明白的重要事情.我不知道CPAN上用于不同事物的词是什么.在这篇文章的开头我已经使用了的话libraries,modules,distributions,但我不知道,我已经正确地使用它们.

您能否解释一下CPAN中每个单词的含义(如果它们可以在CPAN范围内使用):

  • 发布
  • 分配
  • 图书馆

perl cpan

5
推荐指数
1
解决办法
214
查看次数

为什么perl oneliner输出取决于开关位置

你能解释为什么perl开关-en不起作用,但-ne工作正常吗?

$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$ 
Run Code Online (Sandbox Code Playgroud)

您能否提供一个文档的链接,描述这种行为?

perl

5
推荐指数
3
解决办法
244
查看次数

如何使用vscode在JSON中处理大型多行字符串?

我有一个很大的json,里面有很多键,很多值都是长的多行字符串。这是一个简化的json示例:

{
    "key" : "line1\nline2\nline3"
}
Run Code Online (Sandbox Code Playgroud)

我想使用vscode与这样的json-s一起工作。

在json中使用多行字符串非常痛苦,我想将行编辑line1\nline2\nline3为文本:

line1
line2
line3
Run Code Online (Sandbox Code Playgroud)

我已经搜索了vscode marketpalce,但是没有找到解决此问题的扩展。

json visual-studio-code

5
推荐指数
1
解决办法
446
查看次数