作者:麦尔小哈PICA | 来源:互联网 | 2022-12-10 17:26
例如,我有一系列字符串
my @strings;
$strings[1] = 'foo/bar/some/more';
$strings[2] = 'also/some/stuff';
$strings[3] = 'this/can/have/way/too/many/substrings';
我想要做的是拆分这些字符串并将它们存储在哈希中作为这样的键
my %hash;
$hash{foo}{bar}{some}{more} = 1;
$hash{also}{some}{stuff} = 1;
$hash{this}{can}{have}{way}{too}{many}{substrings} = 1;
我可以继续列出我失败的尝试,但我不认为它们会增加问题的价值,但我会提到一个.可以说,我转换'foo/bar/some/more'
到'{foo}{bar}{some}{more}'
.我可以以某种方式将其存储在变量中并执行以下操作吗?
my $var = '{foo}{bar}{some}{more}';
$hash$var = 1;
注意:这不起作用,但我希望它只是由于语法错误.
所有帮助赞赏.
1> Dave Cross..:
与肖恩的答案完全相同的逻辑.但是我在一个子程序中隐藏了聪明的哈希行走位.我将最终值设置为1而不是空哈希引用.
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @keys = qw(
foo/bar/some/more
also/some/stuff
this/can/have/way/too/many/substrings
);
my %hash;
for (@keys) {
multilevel(\%hash, $_);
}
say Dumper \%hash;
sub multilevel {
my ($hashref, $string) = @_;
my $curr_ref = $hashref;
my @strings = split m[/], $string;
for (@strings[0 .. $#strings - 1]) {
$curr_ref->{$_} //= {};
$curr_ref = $curr_ref->{$_};
}
$curr_ref->{@strings[-1]} = 1;
}