On Fri, Oct 31, 2008 at 05:46, Amit Saxena <[EMAIL PROTECTED]> wrote:
snip
> I used "${$row}[0]", "${$row}[1]" etc one by one to get all the columns for
> a particular code. On one of the production code which I am working, they
> have used "@{$row}[0]" , "@{$row}[0]" instead of earlier. The results for
> both of them were same.
>
> When I did a through debugging on this, I found that "@{$row}[0]" or
> "@{$row}[1]" etc is taken as array slice by perl with only one member so it
> returns the value of the column in scalar and not in list context. With
> "${$row}[0]" or "${$row}[1]" etc, the column value is returned in scaler
> context.
>
> I want to know whether it's appropriate to use "@{$row}[0]" , "@{$row}[1]"
> instead of "${$row}[0]", "${$row}[1]" though both of them gives same result
snip

${$row}[0] is better, but $row->[0] is best.

If you need ammunition to convince others then show them this code and
then run it on a fairly modern Perl interpreter.  Perl will throw a
warning like "Scalar value @a[0] better written as $a[0] at z.pl line
8."  It is interesting a warning isn't thrown for references.  I shall
have to research that.

#!/usr/bin/perl

use strict;
use warnings;

my @a = qw/a b c/;

print @a[0], "\n";

All of that said, @{$row}[0] has its uses:

@{$row}[0] = qw(a b c);

produces difference results from

$row->[0] = qw(a b c);

But it is probably better written as

$row->[0] = (qw(a b c))[0];

to avoid confusing people.

-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to