我需要在哈希中获取某个键的所有值.哈希看起来像这样:
$bean = {
Key1 => {
Key4 => 4,
Key5 => 9,
Key6 => 10,
},
Key2 => {
Key7 => 5,
Key8 => 9,
},
};
Run Code Online (Sandbox Code Playgroud)
我只需要值Key4,Key5并Key6为例子.其余的不是兴趣点.我怎么能得到价值观?
更新:所以我没有%bean我只是添加这样的值$bean:
$bean->{'Key1'}->{'Key4'} = $value;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
我知道我想做的这种事情曾经用于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) 这是我正在使用的代码片段:
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,position = -25
size = 1280x1024,position = 25 …
我正在做一个小型数据挖掘项目,其中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) #!/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)
我试图用_替换单词之间的所有空格,但它不起作用.这有什么问题?
处理相互使用的模块的最佳方法是什么?
假设我有一个具有哈希函数的模块:
# 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块中完成.
我将不断发展的代码习惯用法放入模块中,以便我可以重复使用任何习惯用法,我发现自己一遍又一遍地编码.例如: …
这是我的代码:
#!/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.
为了使我的数据更易于访问,我想将表格数据存储在复杂的哈希中.当脚本循环遍历我的数据时,我正在尝试增加'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) $hash_map{$key}->{$value1} = 1;
Run Code Online (Sandbox Code Playgroud)
我只是perl的初学者,我需要这个表达式的帮助,这个表达式意味着什么?我假设将创建一个新的键/值对,但这里1的含义是什么?
我在文件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 ×10
hash ×3
arrays ×1
comparison ×1
if-statement ×1
perl-module ×1
perl5.10 ×1
printf ×1
prototype ×1
reference ×1
regex ×1
sql ×1
substitution ×1