SPUG: Slice of an arrary within a hash?
Joel
largest at largest.org
Fri May 5 13:30:59 CDT 2000
I'm not completely clear on what you're trying to do, but it looks like
something like this would work for you:
#!/usr/bin/perl
# You should always use strict :-)
use strict;
my %DATA;
my $dsku = 'fred';
my @prices = ('11.11','22.22','33.33','44.44');
@{ $DATA{$dsku} } = ('00.00', @prices, '55.55');
my $count;
for my $element ( @{ $DATA{$dsku} } ) {
$count++;
print "\$DATA{\$sku}[$count] = '$element'\n";
}
__END__
Joel
> I'd appreciate a little help understanding the behavior of the
> following script.
>
> I've included 3 versions of the same script which are identical except
> for the subset of lines which have been commented out.
>
> The first example is producing the results I want but I was trying to
> streamline the logic.
>
> - - - - - - - - - - - - - - - Version 1
>
> #!/usr/bin/perl
> %DATA;
> $dsku = 'fred';
> @prices = ('11.11','22.22','33.33','44.44');
> $DATA{$dsku}[0] = '00.00';
> #$DATA{$dsku}[1 .. 4] = @prices[0 .. 3];
> #$DATA{$dsku}[1,2,3,4] = @prices[0,1,2,3];
> $DATA{$dsku}[1] = @prices[0];
> $DATA{$dsku}[2] = @prices[1];
> $DATA{$dsku}[3] = @prices[2];
> $DATA{$dsku}[4] = @prices[3];
> $DATA{$dsku}[5] = '55.55';
>
> for ( my $i = 0; $i < 6; $i++ )
> {
> print "\$DATA{\$sku}[$i] = '$DATA{$dsku}[$i]'\n";
> }
> ====>
> $DATA{$sku}[0] = '00.00'
> $DATA{$sku}[1] = '11.11'
> $DATA{$sku}[2] = '22.22'
> $DATA{$sku}[3] = '33.33'
> $DATA{$sku}[4] = '44.44'
> $DATA{$sku}[5] = '55.55'
>
> - - - - - - - - - - - - - - - Version 2
>
> #!/usr/bin/perl
> %DATA;
> $dsku = 'fred';
> @prices = ('11.11','22.22','33.33','44.44');
> $DATA{$dsku}[0] = '00.00';
> $DATA{$dsku}[1 .. 4] = @prices[0 .. 3];
> #$DATA{$dsku}[1,2,3,4] = @prices[0,1,2,3];
> #$DATA{$dsku}[1] = @prices[0];
> #$DATA{$dsku}[2] = @prices[1];
> #$DATA{$dsku}[3] = @prices[2];
> #$DATA{$dsku}[4] = @prices[3];
> $DATA{$dsku}[5] = '55.55';
>
> for ( my $i = 0; $i < 6; $i++ )
> {
> print "\$DATA{\$sku}[$i] = '$DATA{$dsku}[$i]'\n";
> }
> ====>
> $DATA{$sku}[0] = '44.44'
> $DATA{$sku}[1] = ''
> $DATA{$sku}[2] = ''
> $DATA{$sku}[3] = ''
> $DATA{$sku}[4] = ''
> $DATA{$sku}[5] = '55.55'
>
> - - - - - - - - - - - - - - - Version 3
>
> #!/usr/bin/perl
> %DATA;
> $dsku = 'fred';
> @prices = ('11.11','22.22','33.33','44.44');
> $DATA{$dsku}[0] = '00.00';
> #$DATA{$dsku}[1 .. 4] = @prices[0 .. 3];
> $DATA{$dsku}[1,2,3,4] = @prices[0,1,2,3];
> #$DATA{$dsku}[1] = @prices[0];
> #$DATA{$dsku}[2] = @prices[1];
> #$DATA{$dsku}[3] = @prices[2];
> #$DATA{$dsku}[4] = @prices[3];
> $DATA{$dsku}[5] = '55.55';
>
> for ( my $i = 0; $i < 6; $i++ )
> {
> print "\$DATA{\$sku}[$i] = '$DATA{$dsku}[$i]'\n";
> }
> ====>
> $DATA{$sku}[0] = '00.00'
> $DATA{$sku}[1] = ''
> $DATA{$sku}[2] = ''
> $DATA{$sku}[3] = ''
> $DATA{$sku}[4] = '44.44'
> $DATA{$sku}[5] = '55.55'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
Email to majordomo at pm.org: "action" spug-list your_address
More information about the spug-list
mailing list