小编Axe*_*man的帖子

如何在Perl hash-of -hes中获取二级密钥?

我需要在哈希中获取某个键的所有值.哈希看起来像这样:

$bean = {
     Key1 => {
               Key4 => 4,
               Key5 => 9,
               Key6 => 10,
             },
     Key2 => {
               Key7 => 5,
               Key8 => 9,
             },
};
Run Code Online (Sandbox Code Playgroud)

我只需要值Key4,Key5Key6为例子.其余的不是兴趣点.我怎么能得到价值观?

更新:所以我没有%bean我只是添加这样的值$bean:

 $bean->{'Key1'}->{'Key4'} = $value;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

perl hash perl-data-structures

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

Perl 5.10是否与原型相混淆?

知道我想做的这种事情曾经用于5.8.难道我做错了什么?在Perl 5.10中有没有办法回到那里?

这是模块:

package TableMod;
use base qw<Exporter>;
our @EXPORT_OK = qw<mod_table>;

use Data::Dumper;
sub mod_table (\%@) { print Dumper( @_ ); }

1;
Run Code Online (Sandbox Code Playgroud)

以下是脚本:

use strict;
use warnings;
use Data::Dumper;
use Test::More tests => 4;

sub mod_table_here (\%@) { 
    print Dumper( @_ );
}

use_ok( 'TableMod', 'mod_table' );
can_ok( __PACKAGE__, 'mod_table' );
is( prototype( \&mod_table_here ), '\\%@'
  , q/prototype( \&mod_table_here ) = '\%@'/ 
  );
is( prototype( \&mod_table ), prototype( \&mod_table_here )
   , 'prototypes ARE the SAME!' 
   ); …
Run Code Online (Sandbox Code Playgroud)

perl prototype perl5.10

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

如何在哈希中引用数组中的Perl哈希?

这是我正在使用的代码片段:

my %photo_details = (
 'black_cat' => (
  ('size' => '1600x1200', 'position' => -25),
  ('size' => '1280x1024', 'position' =>  25),
  ('size' =>   '800x600', 'position' =>   0),
 ),
 'race_car' => (
  ('size' => '1600x1200', 'position' =>  10),
  ('size' =>   '800x600', 'position' =>   5),
 ),
);

my $photo = 'black_cat';

foreach my $photo_detail ($photo_details{$photo})
{
 my $size     = $photo_detail{'size'};
 my $position = $photo_detail{'position'};

 print ("size = $size, position = $position\n");
}
Run Code Online (Sandbox Code Playgroud)

我期待得到的是:

size = 1600x1200,po​​sition = -25

size = 1280x1024,position = 25 …

arrays perl hash reference perl-data-structures

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

新的Perl用户:使用数组哈希

我正在做一个小型数据挖掘项目,其中perl脚本从SQL数据库中获取信息并对其进行解析.数据由几个时间戳组成.我想知道在任何特定日期存在多少特定类型的时间戳.不幸的是,这是我的第一个perl脚本,而且当涉及到哈希和数组时,perl的性质令我感到困惑.

代码段:

my %values=();#A hash of the total values of each type of data of each day.
#The key is the day, and each key stores an array of each of the values I need.
my @proposal;
#[drafted timestamp(0), submitted timestamp(1), attny approved timestamp(2),Organiziation approved timestamp(3), Other approval timestamp(4), Approved Timestamp(5)]
while(@proposal=$sqlresults->fetchrow_array()){
 #TODO: check to make sure proposal is valid
 #Increment the number of timestamps of each type on each particular date
 my $i;
for($i=0;$i<=5;$i++)
$values{$proposal[$i]}[$i]++;
#Update rolling average of …
Run Code Online (Sandbox Code Playgroud)

sql perl hash perl-data-structures

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

这种替代有什么问题?

#!/usr/bin/perl

use strict;
use warnings;

my $s = "sad day
 Good day
 May be Bad Day 
 ";

$s =~ s/\w+ \w+/_/gm;

print $s;
Run Code Online (Sandbox Code Playgroud)

我试图用_替换单词之间的所有空格,但它不起作用.这有什么问题?

regex perl substitution

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

处理相互使用的模块的最佳方法是什么?

处理相互使用的模块的最佳方法是什么?

假设我有一个具有哈希函数的模块:

# Really::Useful::Functions::On::Hash.pm

use base qw<Exporter>;
use strict;
use warnings;

use Really::Useful::Functions::On::List qw<transform_list>;

our @EXPORT_OK = qw<transform_hash transform_hash_as_list ...>;

#...
sub transform_hash { ... }

#...
sub transform_hash_as_list {
    return transform_list( %{ shift() } );
}
#...
1
Run Code Online (Sandbox Code Playgroud)

另一个模块已经分段列出:

# Really::Useful::Functions::On::List.pm

use base qw<Exporter>;
use strict;
use warnings;

use Really::Useful::Functions::On::Hash qw<transform_hash>;

our @EXPORT_OK = qw<transform_list some_func ...>;

#...
sub transform_list { ... }

#...
sub some_func { 
    my %params = transform_hash @_;
    #...
}

#...
1
Run Code Online (Sandbox Code Playgroud)

假设足够的这些实用程序函数足够方便我将在BEGIN语句中使用它们并导入函数来处理参数列表或配置数据.

我一直在将子定义放入BEGIN块中,以确保只要有人包含模块就可以使用它们.但是我已经陷入了毛茸茸的竞争条件,其中定义没有在BEGIN块中完成.

我将不断发展的代码习惯用法放入模块中,以便我可以重复使用任何习惯用法,我发现自己一遍又一遍地编码.例如: …

perl perl-module

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

Perl如果不工作?

这是我的代码:

#!/usr/bin/env perl

sub start
{
    ...
}

sub stop
{
    ...
}

if (defined $ARGV[0])
{
    if ($ARGV[0]=='start') {start}
    elsif ($ARGV[0]=='stop') {stop}
    else {die "Unrecognized command: $ARGV[0]"}
}

无论我做什么,它总是执行&start.难道我做错了什么?

我正在使用Linux Mint 10和Perl 5.10.1.

perl comparison if-statement

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

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
查看次数

Perl:关于hashmap的基本问题

$hash_map{$key}->{$value1} = 1;
Run Code Online (Sandbox Code Playgroud)

我只是perl的初学者,我需要这个表达式的帮助,这个表达式意味着什么?我假设将创建一个新的键/值对,但这里1的含义是什么?

perl perl-data-structures

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

为什么perl在从文件读取并写入另一个文件时将"%x"打印为数值?

我在文件1中有这个文字:

printf ("integer value is %x \n", a);
Run Code Online (Sandbox Code Playgroud)

我想从文件1读取数据并写入文件2.当我到达此特定行时,文件2显示​​如下:

printf ("integer value is 0 \n", a);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我怎么能避免这个?

这是我的Perl代码的外观:

while ($line = <$in_fh>) {
    printf $out_fh $line;
}
Run Code Online (Sandbox Code Playgroud)

这里,$ in_fh和$ out_fh是进出文件句柄.

perl printf

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