标签: perl-data-structures

如何在Perl中创建嵌套哈希作为常量?

我想在Perl中做,相当于以下Ruby代码:

class Foo
  MY_CONST = {
    'foo' => 'bar',
    'baz' => {
      'innerbar' => 'bleh'
    },
  }

  def some_method
    a = MY_CONST[ 'foo' ]
  end

end

# In some other file which uses Foo...

b = Foo::MY_CONST[ 'baz' ][ 'innerbar' ]
Run Code Online (Sandbox Code Playgroud)

也就是说,我只想声明一个常量的嵌套哈希结构,以便在类和外部使用.如何?

perl hash constants perl-data-structures

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

如何在Perl中访问存储在哈希中的数组元素?

  # I have a hash 
  my %my_hash;

 # I have an array
  @my_array = ["aa" , "bbb"];

 # I store the array in my hash
  $my_hash{"Kunjan"} = @my_array;

 # But I can't print my array's element
  print $my_hash{"Kunjan"}[0];
Run Code Online (Sandbox Code Playgroud)

我是Perl的新手.请帮我.

perl hash perl-data-structures

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

Perl - 散列和列的哈希:(

我有一组可变大小的字符串,例如:

AAA23

AB1D1

A1BC

AAB212

我的目标是按字母顺序排列并为COLUMNS收集独特的字符,例如:

第一栏:AAAA

第二栏:AB1A

等等...

在这一刻,我能够通过散列哈希来提取帖子.但是现在,我该如何对数据进行排序?我可以为每个散列哈希创建一个新数组吗?

非常感谢你的帮助!

我的代码:

#!/usr/bin/perl

use strict;
use warnings;

my @sessions = (
    "AAAA",
    "AAAC",
    "ABAB",
    "ABAD"
);

my $length_max = 0;
my $length_tmp = 0;

my %columns;

foreach my $string (@sessions){

    my $l = length($string);

    if ($l > $length_tmp){
            $length_max = $l;
    }
}

print "max legth : $length_max\n\n";

my $n = 1;

foreach my $string (@sessions){

    my @ch = split("",$string);

    for my $col (1..$length_max){
        $columns{$n}{$col} = $ch[$col-1];
    }

    $n++; …
Run Code Online (Sandbox Code Playgroud)

perl hash perl-data-structures

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

Perl中的引用:哈希数组

我想迭代一个哈希数组的引用,而不必制作本地副本,但我一直得到不能使用字符串("1")作为ARRAY引用,而"严格引用"错误.为什么?我如何解决它?

sub hasGoodCar {
  my @garage = (
                { 
                 model => "BMW",
                 year  => 1999
                },

                { 
                 model  => "Mercedes",
                 year   => 2000
                },
               );

  run testDriveCars( \@garage );
}    

sub testDriveCars {
  my $garage = @_;

  foreach my $car ( @{$garage} ) { # <===========  Can't use string ("1") as an ARRAY ref while "strict refs" error
  return 1 if $car->{model} eq "BMW";
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

arrays perl hash reference perl-data-structures

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

如何使用Perl同时处理部分任务顺序?

我有一组部分有序的任务,对于每个任务,在执行之前必须执行部分顺序之前严格执行的所有任务.我想同时执行不相关的任务(在一个之前或之后)以尝试最小化总执行时间 - 但是在完成依赖之前不启动任务.

任务将作为(非perl)子进程运行.

我应该如何使用Perl解决这样的问题?什么是并发控制工具和数据结构?

concurrency perl multithreading perl-data-structures

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

Perl:基于特定列对具有多个列的2D数组进行排序

伪代码:

my @unsortedArray = { ["Harry", 10], ["Tim", 8], ["Joe", 3]};
my @sortedArray = ?????
Run Code Online (Sandbox Code Playgroud)

最终sortedArray应该基于col-2(整数)进行排序,处理与"人名"(col-1)的1对1关系.最终结果应如下所示:

sortedArray should be { ["Joe", 3], ["Tim", 8], ["Harry", 10] }; 
Run Code Online (Sandbox Code Playgroud)

arrays perl perl-data-structures

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

Perl序列化和反序列化哈希的散列

我试图序列化散列哈希值,然后反序列化它以获取哈希的原始散列.问题是每当我反序列化它时..附加一个自动生成的$ var1例如.

原始哈希

%hash=(flintstones => {
    husband   => "fred",
    pal       => "barney",
},
jetsons => {
    husband   => "george",
    wife      => "jane",
    "his boy" => "elroy",  
},
);
Run Code Online (Sandbox Code Playgroud)

出现在$ VAR1 = {'simpsons'=> {'kid'=>'bart','wife'=>'marge','husband'=>'homer'},'flintstones'=> {'丈夫' >'fred','pal'=>'barney'},};

有没有什么办法可以得到没有$ var1的哈希的原始哈希.. ??

perl perl-data-structures

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

perl中的内存管理

我在perl中遇到了处理内存的奇怪问题.我正在使用一个使用相当大的哈希结构的perl应用程序.我正在为来回对象指定has ref.但最后似乎即使我要释放对象和哈希值,内存使用量也保持不变.

以下是问题的示例:

 my $hash = {};
 .............
 this ds gets populated with a lot of data ...
 .......
 {
      my $obj = new Class("data"=>$hash);
 .......
 .......
 ......

 }

 #even undefing the $hash
 undef $hash;

 # I can expect some improvement in Memory Utilization, but its not happening
Run Code Online (Sandbox Code Playgroud)

我想我正在做一些非常基本的错误.任何人都可以建议吗?

perl memory-management perl-module perl-data-structures

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

算法效率改进

首先,如果有人提出这个问题,我想道歉.很难找到答案,无法找到如何创建数组哈希和哈希的数组....

我正在创建一个日志分析器.每个错误条目都在表单中

timestamp # # human_timestamp errno #
Run Code Online (Sandbox Code Playgroud)

我使用映射函数创建了散列哈希,以执行以下操作:

$logRef->{++$errCnt} =
{
    line       => $lineNum,
    timestamp  => $timestamp,
    humanStamp => $humanStamp,
    errno      => $errno,
    text       => ''
};
Run Code Online (Sandbox Code Playgroud)

稍后我会做一些分析,我想在行号之间隔离条目.分析条目也存储在哈希中......

$analysis{++$iteration} =
{
    result    => $result,
    startLine => $startLine,
    endLine   => $endLine,
    errors    => undef
};
Run Code Online (Sandbox Code Playgroud)

$ analysis {errors}将是一个数组引用.通过执行以下操作填充它.

foreach my $iteration ( keys %analysis )
{
    my @errKeys = grep { $logRef->{$_}{line} >= $analysis{$iteration}{startLine} &&
                         $logRef->{$_}{line} <= $analysis{$iteration}{endLine} }
                  keys %$logRef;

    my @errs = ();
    push @errs, $logRef->{$_}{errno} foreach ( …
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

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

为什么哈希键在打印时有不同的顺序?

我想使用相同的键构建多个哈希,并且当我打印它们时键要具有相同的顺序.因此,在下面的例子中,密钥$hash1$hash2应始终具有相同的顺序,但应该没有必要创建哈希时保留这个顺序.

use Data::Dumper;

my $hash1 = {
  keyc => 2,
  key1 => 1,
  keya => 3,
  keyb => 4,
};

my $hash2 = {
  keyc => 2,
  key1 => 1,
  keya => 3,
  keyb => 4,
};

print Dumper $hash1, $hash2;
Run Code Online (Sandbox Code Playgroud)

但输出如下:

$VAR1 = {
          'key1' => 1,
          'keyc' => 2,
          'keyb' => 4,
          'keya' => 3
        };
$VAR2 = {
          'keyb' => 4,
          'keya' => 3,
          'keyc' => 2,
          'key1' => 1
        };
Run Code Online (Sandbox Code Playgroud)

哈希有不同的意外顺序.我的perl出了什么问题? …

sorting perl hash data-structures perl-data-structures

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