这是我不明白的事情.
此脚本正常工作(注意地图功能中的连接):
#!/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) 我有一些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)
但这不是我唯一需要的东西.我还想确保所有本地提交都被推送到掌握.
最简单的方法是什么?
每个人都使用一个很棒的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'此测试失败'" 行显示在不同的行上.这是截图:

我编写了一个测试脚本,使用 …
可以用UTF-8编写Perl文档.要做到这一点,你应该写在你的POD:
=encoding NNN
Run Code Online (Sandbox Code Playgroud)
但你应该写NNN什么呢?不同来源给出不同的答案.
=encoding utf8=encoding UTF-8=encoding utf-8什么是正确的答案?在POD中写入的正确字符串是什么?
我正在使用带有trac的git.推后我想做两件事:
第一件事是通过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
但是,如果我改变这两个命令的顺序,我没有收到任何错误,但只有第一个命令工作.
我将不胜感激任何帮助.我试图解决这个问题很长一段时间,我没有想法.
最近,新的伟大事物出现在Perl世界中.在库包中很长一段时间都有t包含测试的文件夹.现在还有一个xt包含作者测试的文件夹.在xt不需要库安装过程中的测试,但它可以帮助图书馆作者日期,以确保该代码是巨大的.
有一个prove与Perl一起运行测试的spript .如果prove没有参数运行
,将执行文件夹't'中的所有测试.如果你想同时运行t并xt测试你应该写:
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认为这1 and 0是一个真正的价值.为什么?
$ perl -e '$x = 1 and 0; print $x;'
1
Run Code Online (Sandbox Code Playgroud) 你能解释为什么perl开关-en不起作用,但-ne工作正常吗?
$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$
Run Code Online (Sandbox Code Playgroud)
您能否提供一个文档的链接,描述这种行为?
我有一个很大的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,但是没有找到解决此问题的扩展。