标签: perl-data-structures

如何计算两个数组中每个元素之间的差异?

我有一个带有数字的文本文件,我按如下方式分组,用空行分隔:

42.034 41.630 40.158 26.823 26.366 25.289 23.949

34.712 35.133 35.185 35.577 28.463 28.412 30.831

33.490 33.839 32.059 32.072 33.425 33.349 34.709

12.596 13.332 12.810 13.329 13.329 13.569 11.418
Run Code Online (Sandbox Code Playgroud)

注意:组总长度相等,如果组很大,可以排列多行,比如500个数字.我正在考虑将组放在数组中并沿着文件的长度进行迭代.

我的第一个问题是:如何从数组1中减去数组2的第一个元素,从数组2中减去数组3,类似于第二个元素,依此类推直到组的末尾?

即:

34.712-42.034,35.133-41.630,35.185-40.158 ...till the end of each group

33.490-34.712,33.839-35.133   ..................
Run Code Online (Sandbox Code Playgroud)

然后将第一个元素的差异保存在一个组中(第二个问题:如何?)直到结束

即:

34.712-42.034 ; 33.490-34.712 ; and so on in one group

35.133-41.630 ; 33.839-35.133 ; ........
Run Code Online (Sandbox Code Playgroud)

我是初学者,所以任何建议都会有所帮助.

perl matrix perl-data-structures

2
推荐指数
1
解决办法
1054
查看次数

使用数组来处理哈希散列

这是我的问题:

我有一个像数据结构的文件系统:

%fs = (
    "home" => {
        "test.file"  => { 
            type => "file",
            owner => 1000, 
            content => "Hello World!",
        },
    },
    "etc"  => { 
        "passwd"  => { 
            type => "file",
            owner => 0, 
            content => "testuser:testusershash",
            },
        "conf"  => { 
            "test.file"  => { 
                type => "file",
                owner => 1000, 
                content => "Hello World!",
            },
        },
    },
);
Run Code Online (Sandbox Code Playgroud)

现在,为了得到/etc/conf/test.file我需要的内容$fs{"etc"}{"conf"}{"test.file"}{"content"},但我的输入是一个数组,看起来像这样:("etc","conf","test.file").

因此,因为输入的长度是变化的,所以我不知道如何访问散列的值.有任何想法吗?

perl perl-data-structures

2
推荐指数
1
解决办法
100
查看次数

在Perl中合并哈希:特殊情况

如何在perl中合并两个哈希值,其中键可以碰撞,值是数组.如果发生冲突,我想合并值数组.

正常合并会不会很好?

我很抱歉,如果这是一个重复,但我试着抬头,但没有任何这样的具体出现.

谢谢!

perl perl-data-structures

2
推荐指数
1
解决办法
149
查看次数

hexdigest在linux和windows中为同一个文件生成不同的值


我正在使用Digest :: MD5模块,并在该hexdigest中为windows和linux返回不同的值.

请帮我解决这个问题.

use Digest::MD5;
my $ctx=Digest::MD5->new();
open RD, "input.txt";
$ctx->addfile(*RD);
close RD;
print $ctx->hexdigest;
Run Code Online (Sandbox Code Playgroud)

input.txt文件具有以下内容:

hello
Run Code Online (Sandbox Code Playgroud)

输出:窗口

5d41402abc4b2a76b9719d911017c592
Run Code Online (Sandbox Code Playgroud)

输出:Linux

af5597c29467a96523a70787c319f4db
Run Code Online (Sandbox Code Playgroud)

谢谢,
Saravanan

perl perl-module digest md5sum perl-data-structures

2
推荐指数
1
解决办法
216
查看次数

Perl"\ my $ var"为什么"我的"用反斜杠逃脱了?

我正在查看一些使用File :: Path制作和删除文件路径的示例代码.

http://perldoc.perl.org/File/Path.html

我可以让函数正常工作但我在使错误消息正常工作时遇到了一些困难.在捕获错误消息的示例中,他们使用\之前的my.这是什么目的\

# Sample code from the link above
remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} );  # why escape the my?!?!
if (@$err) {
    for my $diag (@$err) {
        my ($file, $message) = %$diag;
        if ($file eq '') {
            print "general error: $message\n";
        }
        else {
            print "problem unlinking $file: $message\n";
        }
    }
}
else {
    print "No error encountered\n";
}
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这个,我无法在任何地方找到解释.我尝试删除了\,我得到一个语法错误,所以很明显它是必要的,但为什么?

syntax perl scope perl-module perl-data-structures

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

这不是数组引用吗?为什么不是数组引用?

我试图通过以下几行来调试一个令人费解的问题,深入研究我继承的程序,

my $log = [];
$root->validate_subtree($log); 
Run Code Online (Sandbox Code Playgroud)

导致以下错误

Treex :: PML :: Node :: validate:log必须是ARRAY引用

$root是一个类型的对象Treex::PML::Node,并且这两条线确实相邻 - 我没有留下任何东西.我去了错误消息的来源,并validate_subtree()检查其参数如下(Node.pm第423行):

sub validate_subtree {
  my ($node, $log) = @_;
  if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
    croak __PACKAGE__."::validate: log must be an ARRAY reference";
  }
Run Code Online (Sandbox Code Playgroud)

我认为这$log = [] 初始化$log为数组引用!我错过了什么?

oop perl perl-data-structures

2
推荐指数
1
解决办法
64
查看次数

访问解码为 HASH 和哈希引用数组的 JSON

鉴于以下转储程序输出,有没有办法遍历每个散列以仅列出每个results->id记录下的项目?我希望能够说这样的话:

print $results{1342}{'domain'};

并让语句返回testing11.com结果。

我是否必须首先通读所有results数组,然后使用它$results[$counter]{id}来访问那里的数据?我不知道如何继续。

$VAR1 = { 
          'end_time' => 1466017739,
          'options' => {
                         'hour_offset' => '00',
                         'timezone' => 'America/New_York'
                       },
          'field_headers' => {
                              'priority' => 'Priority',
                              'status' => 'Status',
                              'assignee_external_id' => 'Assignee external id',
                              'initially_assigned_at' => 'Initially assigned at'
                             },
          'results' => [
                         {
                           'priority' => 'High',
                           'status' => 'Open',
                           'domain' => 'testing11.com',
                           'generated_timestamp' => 1546547669,
                           'id' => 1342
                          },
                         {
                           'priority' => 'Low',
                           'status' => 'Open',
                           'domain' => 'testing22.com',
                           'generated_timestamp' …
Run Code Online (Sandbox Code Playgroud)

perl hash json data-structures perl-data-structures

2
推荐指数
1
解决办法
1795
查看次数

如何打印用作%hash值的@array的$元素?

我认为对于有经验的人来说这应该很容易解决,对我来说虽然我在谷歌上尝试和搜索这个但是找不到适合我情况的东西.我只想让$ amountok和$ amountko给出它们在索引0和1处的值,但它不是这样的(参见#mark).

print ERGEBNIS "ID;Amount;Amount OK;Amount KO\n";
foreach my $key (keys %elementhash){
  my $sum = 0;              
  foreach $valueofkey(@{$elementhash{$key}}){                   
     $sum += $valueofkey;           
  }

  #my $amountok= @{$elementhash{$key}[0]};
  #my $amountko= @{$elementhash{$key}[1]};

  print ERGEBNIS $key.";".$sum.";".$amountok.";".$amountko."\n";

}
Run Code Online (Sandbox Code Playgroud)

这会让我错误:"不能使用字符串"7"作为数组引用.",这必须是可能的,但我只是不知道如何!感谢你们

这是%elementhash的Dumper输出:

 $VAR1 = {                '1000' => [7],               
                          '2000' => [5],                  
                          '3000' => [56, 12]              
         };                     
Run Code Online (Sandbox Code Playgroud)

arrays perl hash perl-data-structures

2
推荐指数
1
解决办法
86
查看次数

合并两个 yml 文件不处理重复项?

我正在尝试使用Hash::Mergeperl 模块合并 2 个 yml 文件。并尝试使用DumpfromYMAL模块将其转储到 yml 文件。

use strict;
use warnings;
use Hash::Merge qw( merge );
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');
use File::Slurp qw(write_file);
use YAML;
my $yaml1 = $ARGV[0];
my $yaml2 = $ARGV[1];
my $yaml_output = $ARGV[2];
my $clkgrps = &YAML::LoadFile($yaml1);
my $clkgrps1 = &YAML::LoadFile($yaml2);
my $clockgroups = merge($clkgrps1, $clkgrps);
my $out_yaml = Dump $clockgroups;
write_file($yaml_output, { binmode => ':raw' }, $out_yaml);
Run Code Online (Sandbox Code Playgroud)

合并 yml 文件后,我可以看到重复的条目,即两个 yml 文件中的以下内容相同。合并时,它将它们视为不同的条目。我们有处理重复的隐式方法吗?

perl yaml perl-data-structures

2
推荐指数
1
解决办法
190
查看次数

Perl:在复杂哈希中生成数组

为了使我的数据更易于访问,我想将表格数据存储在复杂的哈希中.当脚本循环遍历我的数据时,我正在尝试增加'HoHoHoA'.根据'perldsc'中的指南:

push @ { $hash{$column[$i]}{$date}{$hour} }, $data[$i];
Run Code Online (Sandbox Code Playgroud)

该脚本编译并运行没有问题,但不会向哈希添加任何数据:

print $hash{"Frequency Min"}{"09/07/08"}{"15"}; 
Run Code Online (Sandbox Code Playgroud)

即使密钥应该存在,也不返回任何内容.在哈希上运行'exists'表示它不存在.

我正在阅读的数据文件如下所示:

DATE       TIME     COLUMN1 COLUMN2 COLUMN3...    
09/06/2008 06:12:56 56.23   54.23   56.35...
09/06/2008 06:42:56 56.73   55.28   54.52...
09/06/2008 07:12:56 57.31   56.79   56.41...
09/06/2008 07:42:56 58.24   57.30   58.86...
.
.
.
Run Code Online (Sandbox Code Playgroud)

我希望将任何给定日期和小时的数组中每列的值组合在一起,因此{COLUMN},{DATE}和{HOUR}的三个哈希值.

结果结构如下所示:

%monthData = (
               "COLUMN1" => {
                                    "09/06/2008" => {
                                                      "06" => [56.23,56.73...],
                                                      "07" => [57.31,58.24...]
                                                    }
                            },
               "COLUMN2" => {
                                    "09/06/2008" => {
                                                      "06" => [54.23,55.28...],
                                                      "07" => [56.79,57.30...]
                                                    }
                            },
               "COLUMN3" => {
                                    "09/06/2008" => { …
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

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