最近我试图用Perl做一个简单的循环,我发现了一个我不明白的行为.
这里的行为:
my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}++) % 2;
warn $a->{index};
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出将是:
0,0,0,..,0
Run Code Online (Sandbox Code Playgroud)
但是,如果我用'a - > {index} +1替换$ a - > {index} ++的"相同"代码,循环就可以了,例如
my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}+1) % 2;
warn $a->{index};
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
1,0,1,0,1,0,1,0...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有人可以解释一下++/+1之间的区别吗?我发现这真的很"难看",因为如果我没有将结果分配给"++"中的任何变量,代码将按预期工作,除非我将总和放在()中.
此代码将正确执行循环:
my $a = {index => 0};
for (0 .. 10) {
warn $a->{index}++ % 2;
}
Run Code Online (Sandbox Code Playgroud)
使用总和中的(),代码将输出: 1,2,3,4,5,6,7,8,9
my $a = {index => 0}; …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现类似于 Mysql 的行为,为我通过 ES 管道索引的每个文档的元数据添加 insert_at/updated_at 。
我的管道是这样的:
{
"description": "Adds createdAt and updatedAt style timestamps",
"processors": [
{
"set": {
"field": "_source.indexed_at",
"value": "{{_ingest.timestamp}}",
"override": false
}
},
{
"set": {
"field": "_source.updated_at",
"value": "{{_ingest.timestamp}}",
"override": true
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我没有映射,只尝试添加一个文档:
POST test_pipelines/doc/1?pipeline=timestamps
{
"foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)
管道成功创建indexed_at并且updated_at:
{
"_index": "test_pipelines",
"_type": "doc",
"_id": "1",
"_score": 1,
"_source": {
"indexed_at": "2018-07-12T10:47:27.957Z",
"updated_at": "2018-07-12T10:47:27.957Z",
"foo": "bar"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试更新 doc 1,indexed_at该字段每次都会更改为更新文档的同一日期。
更新请求示例:
POST …Run Code Online (Sandbox Code Playgroud) 我正在使用Search :: Elasticsearch和Search :: Elasticsearch :: Scroll进行搜索并滚动到我的elasticsearch服务器.
在滚动过程中,对于某些查询,我在滚动搜索结果时看到下一个错误:
2016/03/22 11:03:38 - 265885 FATAL: [Daemon.pm][8221]: Something gone wrong, error $VAR1 = bless( {
'msg' => '[Missing] ** [http://localhost:9200]-[404] Not Found, called from sub Search::Elasticsearch::Scroll::next at searcher.pl line 92. With vars: {\'body\' => {\'hits\' => {\'hits\' => [],\'max_score\' => \'0\',\'total\' => 5215},\'timed_out\' => bless( do{\\(my $o = 0)}, \'JSON::XS::Boolean\' ),\'_shards\' => {\'failures\' => [{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [4920053]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1},{\'index\' => undef,\'reason\' …Run Code Online (Sandbox Code Playgroud) 我是单元测试的新手.我假装加载内部使用Test :: More的N个类,用自己的封装进行不同的测试.
但是我接受了这个错误:"你试图在Tests/Bar.pm第9行计划两次."
这种"多个测试"的方法是正确的,我的意思是它是在perl中进行单元测试的标准方法吗?如何使用Test :: More获得这种级别的封装?
谢谢你的建议!
main.pl:
use strict;
use warnings;
use utf8;
use Tests::Foo;
use Tests::Bar;
my $ret1 = Tests::Foo->run();
my $ret2 = Tests::Bar->run();
Run Code Online (Sandbox Code Playgroud)
测试:: Foo:
package Tests::Foo;
use strict;
use warnings;
sub run
{
my $ret;
use Test::More qw(no_plan);
my $test = Test::More->builder;
is(1,1,'correct()');
is(1,2,'fails()');
return $test;#return all test object
}
1;
Run Code Online (Sandbox Code Playgroud)
测试::酒吧
package Tests::Bar;
use strict;
use warnings;
sub run
{
my $ret;
use Test::More qw(no_plan);
my $test = Test::More->builder;
is(2,1,'fail()');
is(2,2,'correct()');
return $test;#return all …Run Code Online (Sandbox Code Playgroud) 我有两个字段,假设名称是
{"apple":100} and {"orange: 50"}
我想使用 Grafana 指标来计算“苹果”和“橙色”的总和
我尝试使用多个总和指标,但这并没有将两个字段的总和相加。
经过网上发布的讨论/问题后,我仍然无法找到确切的解决方案。