whahey - the code works, a big list of associations and extenstions scrolls by, albiet puntuated with complaints about being unable to recognise association list and use of unitialised values or string in concatenation...

but yeah, the job that ikegami did was great - I need to go and look up the next and substr and then I can use this as a lesson for further mongering.

out of curiosity my own tangled efforts had reached here:

my $class; my $val; my $key; my $watchnum = 0; my $error; unless (defined($ARGV[0])){ foreach $class (keys %{ $Registry->{"Classes:"} }){ if ($class =~ /^[.]/) { my %RegHash = %{ $Registry->{"Classes:$class"} }; $error = Dumper %RegHash; while (my ($key, $val) = each(%RegHash)){#or die "failure +to read registry: $! \nlast contents of Registry Hash = $error \n"; if ($val eq ":"){ print "$class = $key\n"; $watchnum = 1; } } if ($watchnum == 0){ die "failure to recognise association list: $!"; } } } }

which just outputs: failure to recognise association list
any clues as to why that is... maybe because I invoked die... perhaps I should use warn instead... hmmm *goes and sees if that's the problem*

on another note I now just need to mod this so that it can accept some arguments and ergo change associations - I'm trying to make a setup that will automatically change the default browser on an ME system, I thought a cool way to do that would be to re-write the Windows 2000+ ftypeand assoc in perl (it's mainly just the ftype association that dictates main browser) So some additional args and repeat the trick for ftype. It has also occured to me too check whether there's a CPAN module for associations...
update:I managed to get this to work without squaking:

#!/usr/bin/perl use warnings; use strict; use Win32::TieRegistry (Delimiter => ":"); use Data::Dumper; my $class; my $val; my $key; my $error; unless (defined($ARGV[0])){ foreach $class (keys %{ $Registry->{"Classes:"} }){ if ($class =~ /^[.]/) { my $RegHash = $Registry->{"Classes:$class"}; #$error = Dumper %RegHash; while (my ($key, $val) = each(%$RegHash)){#or die "failure + to read registry: $! \nlast contents of Registry Hash = $error \n"; if ($key eq ":"){ print "$class = $val\n"; } #else{ # warn "unable to recognise association for $class" #} } } } }
It's ugly and I don't know if it's complete, will have to analyse further - if i din't comment out the warns, it would squak at every single subkey and value under the $class, so if exists is probably best...

In reply to Re^2: Confused: Hashrefs in TieRegistry by Maze
in thread Confused: Hashrefs in TieRegistry by Maze

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.