Jan Eden wrote: > > Hi, Hello,
> I wrote a script to update some websites based on a template system. The > script starts asking the user to choose a site to update: > > [script preamble omitted] > > my ($update_path, $site_root, $site_type); > > my %choice_hash = ( > 1 => 'janeden', > 2 => 'gargnano', > 3 => 'breskens', > ); > > my %site_hash = ( > janeden => "/Users/jan/Sites/jan-eden", > gargnano => "/Users/jan/Sites/gargnano", > breskens => "/Users/jan/Sites/breskens", > ); > > print "\nPlease choose a site!\n\n"; > > foreach (sort {$a <=> $b} keys %choice_hash) { printf "(%s) %15s\n", $_, > $choice_hash{$_}; } > > print "Choice: "; > > chomp (my $site_choice = <STDIN>); > > if (exists $choice_hash{$site_choice}) { > $site_type = $choice_hash{$site_choice}; > $site_root = $site_hash{$site_type} > } > else { > die "No valid site - scripts exits.\n"; > } > > While this works, it seems a little clumsy to use two hashes for the > choice/sitename and sitename/siteroot. I read about hashes of hashes > (using references). Could I use this method here to simplify my script? You could probably use an array of arrays my @sites = ( [ janeden => '/Users/jan/Sites/jan-eden' ], [ gargnano => '/Users/jan/Sites/gargnano' ], [ breskens => '/Users/jan/Sites/breskens' ], ); print "\nPlease choose a site!\n\n"; for ( 1 .. @sites ) { printf "(%d) %s\n", $_, $sites[ $_ - 1 ][ 0 ]; } print 'Choice: '; my $site_choice = <STDIN> - 1; my ( $site_type, $site_root ); if ( exists $sites[ $site_choice ] ) { ( $site_type, $site_root ) = @{ $sites[ $site_choice ] }; } else { die "No valid site - scripts exits.\n"; } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>