in reply to Dynamic population of a hash

As others have said you've not supplied enough information, but this may get you started:

use strict; use warnings; use Data::Dumper; my @strs = ( '/Workstation_X_X/<someotherpath>/filename.xxx', '/Workstation_X_X/<someotherpath>/filename.xxx', '/Workstation_X_X/<someotherpath>/filename.yyy' ); my %unique; @unique {@strs} = (); print Dumper (\%unique);

Prints:

$VAR1 = { '/Workstation_X_X/<someotherpath>/filename.xxx' => undef, '/Workstation_X_X/<someotherpath>/filename.yyy' => undef };

Perl is Huffman encoded by design.

Replies are listed 'Best First'.
Re^2: Dynamic population of a hash
by JFarr (Sexton) on Nov 08, 2005 at 22:14 UTC
    Forgive me, I'll be more specific. With the strings that will be read in from the file, how would I make the the mappings dynamically.. So if the first $T is /Workstation_X_X/<someotherpath>/filename.xxx, would I do something like:
    foreach $T (@myfile) { %map = {'first', X, 'second', Y, 'third', Z); }
    Now somes the other question, being so new to perl, how do would you parse the "/Workstation_X_X/<someotherpath>/filename.xxx" strings into the X,Y,Z? Using reg expression? grep? some magic?
      Your question is still remarkably unclear. What is X, Y and Z? In your filename, all I see are a couple Xes.

      If you've got an ordered list of data, (which is what I surmise from your keynames of 'first', 'second', and 'third'), why are you using a hash instead of an array?

      Be very specific about what you're trying to accomplish. No more nonsensical sample data. Show us what you have and what you're trying to do with it and what code you've written.

      Give us three sample strings and what you expect to see in the hash.

      BTW, I'd tend to avoid map as a name in the same way I'd tend to avoid grep and and and for as names.


      Perl is Huffman encoded by design.
      You can use split to split the path up on the slashes, like so:
      my @values = split m:/:, $path_string;
      It's not at all clear why you'd be putting that into a hash as you illustrate. It would be more interesting to make a multilevel hash that mimics the hierarchy of a list of paths:
      my $hashed_path = {}; for my $path_string (@list_of_paths) { my $hpref = $hashed_path; for $dir (split m:/:, $path_string) { $hpref->{$dir} = {} unless exists $hpref->{$dir}; $hpref = $hpref->{$dir}; } }
      That might be a bit much to absorb so early in your Perl experience, but maybe not.

      Caution: Contents may have been coded under pressure.

        Thanks everyone. A more concise code sample would be nice, but unfortunately I cannot place this in the public view, so anything I can put out there is gutted etc....But I'll be more attentive when I post other questions and try to make it more complete.

        Could you explain the my $hashed_path={}. Is this some sort of Perl initialization for a variable?

        In my ignorance, how does this make a multilevel hash? I don't see the hast operator in the sample. I understand that PERL does some magic behind the scenes, is this one of those cases?