我正在寻找一种更优雅的方法来创建包含我从配置文件中读取的列表的哈希。这是我的代码:
read_config($config_file => my %config);
my $extension_list_reference = $config{extensions}{ext};
my @ext;
# Store each item of the list into an array
for my $i ( 0 .. (@$extension_list_reference - 1) ) {
$ext[$i] = $extension_list_reference->[$i];
}
# Create hash with the array elements as the keys
foreach my $entry (@ext) {
$extensions{$entry} = "include";
}
感谢。
答案 0 :(得分:13)
my %hash = map { $_ => 'include' } @list;
答案 1 :(得分:6)
尝试使用地图: http://perldoc.perl.org/functions/map.html
以下是您的新代码应该是什么样的:
my %extensions = map { $_ => "include" } @{ $config{extensions}{ext} };
答案 2 :(得分:2)
如果我理解你的问题,你就是这样做的:
@extensions{@$extension_list_reference} = ();
注意:散列的每个值都是空的,但您仍然可以使用 exists 函数检查散列中是否存在该键,如下所示:
if(exists $extensions{$some_key}) {...
P.S。如果由于某种原因你真的需要这些字符串'include'作为值,你也可以拥有它们:
@extensions{@$extension_list_reference} = ('include') x @$extension_list_reference;
答案 3 :(得分:1)
这样:
read_config($config_file => my %config);
%extensions = map +($_ => "include"), @{$config{extensions}{ext}};
或者这样:
read_config($config_file => my %config);
@extensions{@{$config{extensions}{ext}}} = ("include") x @{$config{extensions}{ext}};