in reply to Re: Confused: Hashrefs in TieRegistry
in thread Confused: Hashrefs in TieRegistry

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...

Replies are listed 'Best First'.
Re^3: Confused: Hashrefs in TieRegistry
by ikegami (Patriarch) on Aug 16, 2006 at 12:10 UTC
    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...

    "unable to recognise association list" is not an error. I'd remove the line that outputs that, but I didn't know if you were planning on focusing on a specific extention later on.

    The uninitalized value is because you ran it without strict, and because I accidently used used $class where I should have $ext. (Copy and paste error.)

    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

    Why are you looping if you are looking for a specific extention?

      Why are you looping if you're looking for a specific extension

      ah my wise freind, if I couldn't do this then what were my hopes of creating a tool that could be used in general situations, which is my ultimate aim, also my set task of recreating the 2000+ utils wouldn't be nearly as fun if the utils only did a select bit of what the "genuine windows" tools perfomed - my sub-task of setting the default browser was really just bait to the chase.

      bearing in mind that i'm not actually working towards a deadline etc, i'm just challenging myself, i've only been doing interesting things with perl for about a week, not including some basic examples from the llama book over the last month or so, i'm just looking for something to do.

      and yes the "unable to recognise associations" isn't an error, but it all depends on what you want to achieve and in the end what matters is that those involved understand, don'tcha think? which is fine because I think i get it now
Re^3: Confused: Hashrefs in TieRegistry
by ikegami (Patriarch) on Aug 16, 2006 at 12:09 UTC
    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...

    "unable to recognise association list" is not an error. I'd remove the line that outputs that, but I didn't know if you were planning on focusing on a specific extention later on.

    The uninitalized value is because you ran it without strict, and because I accidently used used $class where I should have $ext. (Copy and paste error.)

    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

    Why are you looping if you are looking for a specific extention?