我试图计算我在日志中跟踪的某些服务的开始和停止时间。 我不会在这里讲完整的代码,但是我做哈希的方法是这样的: 我将这些起点和终点传递给匿名哈希。 首先,我创建一个填充有键和值的匿名哈希(在我的情况下,$ knot是键,零是值)。接下来,我用另一个哈希替换值。 我的代码如下:
foreach $knot (@knots){
chomp $knot;
$variable = $variable."$knot;0;";
$Services = {split(/;/,$variable)};
}
my $data =
{
Starts=>'0',
Stops=>'0',
};
foreach my $key (keys %$Services) {
$Services->{$key} = $data;
}
print Dumper $Services;
打印显示:
$VAR1 = {
' knot1' => {
'Stops' => '0',
'Starts' => '0'
},
' knot2' => $VAR1->{' knot1'},
' knot3' => $VAR1->{' knot1'},
' knot4' => $VAR1->{' knot1'},
' knot5' => $VAR1->{' knot1'},
,依此类推。有更好的方法吗?如果我是对的,我的方法会写得不好,因为更改knot1开始/停止会更改所有其他结值。
答案 0 :(得分:0)
在Perl中,借助Autovivification,计数非常简单。您可以随时创建匿名数据结构,如下所示:
#!/usr/bin/env python
import inspect
called=lambda: inspect.stack()[1][3]
def caller1():
print "inside: ",called()
def caller2():
print "inside: ",called()
if __name__=='__main__':
caller1()
caller2()
shahid@shahid-VirtualBox:~/Documents$ python test_func.py
inside: caller1
inside: caller2
shahid@shahid-VirtualBox:~/Documents$
这将产生所需的计数结构:
use Data::Dumper;
my %hash = ();
$hash{apple}{green}++;
$hash{apple}{red} ++;
$hash{pear}{yellow}++;
$hash{apple}{green}++;
$hash{apple}{red} ++;
$hash{apple}{green}++;
print Dumper(\%hash);
这也可以在使用变量的循环中使用(此处使用对哈希的引用):
$VAR1 = {
'apple' => {
'green' => 3,
'red' => 2
},
'pear' => {
'yellow' => 1
}
};
导致:
my $hash_ref = {};
for my $fruit (qw( apple pear apple peach apple pear )) {
$hash_ref->{$fruit}++;
}
print Dumper($hash_ref);