Re: Simultaneously a list and a hash

2001-01-12 Thread Philip Newton

Robin Houston wrote:
>   local *mydir;
>   @mydir = qw(file1.txt file2.txt);
>   %mydir = (anotherdir => [qw(file3.txt file4.txt)]);
> 
>   my $dirstruct = {mydir => *mydir};
[...]
>   my $mydir = *{gensym};
>   @$mydir = qw(file1.txt file2.txt);
>   %$mydir = (anotherdir => [qw(file3.txt file4.txt)]);
> 
>   my $dirstruct = {mydir => $mydir};

Ah. I had guessed something might be possible with typeglobs. It still seems
rather unnatural to me :-).

Cheers,
Philip



Simultaneously a list and a hash

2001-01-12 Thread Robin Houston

In the "Directory to Data Structure" thread, there's been some
talk of a value which is a list *and* a hash, so you can have
a structure like 

$dirstruct{'mydir'}->['file1.txt', 'file2.txt']
$dirstruct{'mydir'}->{'anotherdir'}->['file3.txt', 'file4.txt']

and there was talk of tie().

But really there's a much easier way to do it:

  local *mydir;
  @mydir = qw(file1.txt file2.txt);
  %mydir = (anotherdir => [qw(file3.txt file4.txt)]);

  my $dirstruct = {mydir => *mydir};

  $,=", "; $\="\n";
  print @{$dirstruct->{mydir}};
  print @{$dirstruct->{mydir}->{anotherdir}};


or if you're offended by dynamic scoping,

  use Symbol 'gensym';

  my $mydir = *{gensym};
  @$mydir = qw(file1.txt file2.txt);
  %$mydir = (anotherdir => [qw(file3.txt file4.txt)]);

  my $dirstruct = {mydir => $mydir};

  $,=", "; $\="\n";
  print @{$dirstruct->{mydir}};
  print @{$dirstruct->{mydir}->{anotherdir}};


 .robin.

-- 
Beware. The paranoids are watching you.