【发布时间】:2020-06-14 06:38:53
【问题描述】:
我正在为自己开发一个项目,但在将哈希传递给子例程时遇到了问题。实际上有几个子例程,但我试图将其精简到最低限度。我意识到 %mdc 是一个全局哈希,所以我不必将它传递给我拥有的所有子例程,但出于习惯,我更喜欢这种方式。虽然下面的 sn-p 确实有效,但感觉它可以更清洁。
不管怎样,让我想到一定有更好的方法的部分是以下几行:
%mdc_def = mysub(\%mdc);
%mdc = %$mdc_def;
感觉...对我来说很笨拙,但我没有找到一种方法让这两行只是一个...类似于(即使它的语法不好):
%mdc = %mysub(\%mdc);
然后,如果我应该有一个 mysub2 也需要该哈希,那么我也必须在该子例程中执行相同的两行随机播放。只是感觉很乱。
这是我正在处理的 sn-p:
use strict;
use warnings;
my %mdc = ();
my $mdc_def;
$mdc{abc} = 123;
$mdc{cde} = 234;
foreach (sort keys (%mdc)) { print "before $_ = $mdc{$_}\n"; }
$mdc_def = mysub(\%mdc);
%mdc = %$mdc_def;
foreach (sort keys (%mdc)) { print " after $_ = $mdc{$_}\n"; }
sub mysub {
my ($mdc_def) = @_;
my %m = %$mdc_def;
$m{def} = 345;
$m{efg} = 456;
return \%m;
}
提前致谢。
【问题讨论】:
标签: perl hash subroutine