> Huh. So it does... that doesn't look like it's making a reference,
> though. I think I would write that as @{$localtime}{ ... } for
> clarity.
>
I only got out my "snippy" voice because it will be a snowy day here
when I post example code to the list that hasn't actually been tested.
It does not boost ones reputation as a source of Good Advice to give
non-functioning examples, or suggest breaking known-working code.
As to the clarity question. To my eyes, I find spurious {} tend to
diminish rather than enhance, especially in common idioms, but I am
wiling to accept it as a question of taste.
Last night, my associate Will remarked, "You are replying to someone
who is confused by simple arrays with an example of a hashref-slice?"
And I responded: "Hash slices (and their reference form) are such a
wonderfully useful tool that they should be taught early and often."
To that end: a humble example...
------------- begin perl code --------------------------
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
#
# Suppose we want to collect a little information
# about a person
#
my %person;
## brute force technique
# Gets the job done. Not very pretty.
$person{first_name} = 'Lawrence';
$person{last_name} = 'Statton';
$person{ocupation} = 'Perl Hacker';
$person{city} = 'Guadalajara';
$person{country} = 'Mexico';
## Slightly easier on the fingers version:
%person = ( first_name => 'Lawrence',
last_name => 'Statton',
occupation => 'Perl Hacker',
city => 'Guadalajara',
country => 'Mexico' );
## Here is the hash slice notation
@person{ qw / first_name last_name occupation city country / } =
( 'Lawrence', 'Statton', 'Perl Hacker', 'Guadalajara', 'Mexico' );
## what can I do with that?
## suppose you have a line from a text file of the form
my $line = 'Lawrence:Statton:Perl Hacker:Guadalajara:Mexico';
@person{ qw / first_name last_name occupation city country/ } = split(':',
$line );
##
## NOW - let's do that whole thing, instead of using a hash (%person) we'll
## use a hashref $person
##
my $person;
$person->{first_name} = 'Lawrence';
$person->{last_name} = 'Statton';
$person->{ocupation} = 'Perl Hacker';
$person->{city} = 'Guadalajara';
$person->{country} = 'Mexico';
# or ...
%$person = ( first_name => 'Lawrence',
last_name => 'Statton',
occupation => 'Perl Hacker',
city => 'Guadalajara',
country => 'Mexico' );
# even better ...
$person = { first_name => 'Lawrence',
last_name => 'Statton',
occupation => 'Perl Hacker',
city => 'Guadalajara',
country => 'Mexico' };
## now, combining the hashref with the hash-slice notation, we get:
@$person{ qw / first_name last_name occupation city country/ } = split(':',
$line ); # creates $person = { ... }
## compare it to a duplicate of the hash-slice --> hash notation
@person{ qw / first_name last_name occupation city country/ } = split(':',
$line ); # creates %person = ( ... )
-------------- end perl code ---------------------------
> > Computer software consists of only two components: ones and
> > zeros, in roughly equal proportions. All that is required is to
> > sort them into the correct order.
>
> Heh. I like that.
Thanks. A friend and I came up with that in a late-night debugging
session in 1985. I think it was the same sleep-deprivation-induced
stupor that produced the spoonerism 'iso-optilator'.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>