Some interesting comments on yesterday's Haskell post. I thought I'd write this in Perl to compare. Of course, we don't have an "inits" function in the standard library, but that's easily written:
#!/usr/bin/perluse strict; use warnings;use Data::Dumper; my %hash = ( "key1" => 1, "key2" => 2, "other" => 3,); sub inits { my $string = shift or return; return ($string, inits( substr($string, 0, -1)) );} sub getPrefixMap { my %hash = @_; return map { my $k = $_; my $v = $hash{$_}; map { ($_ => $v) } inits $k; } keys %hash;} my %map = getPrefixMap( %hash );print Dumper( \%map );
This is a bit noisier, but perhaps more straight-forward than the final haskell version…
Update: broquaint pointed out that the code listing above was missing the zero in the substr, breaking it. Thanks!