EPrints Technical Mailing List Archive

See the EPrints wiki for instructions on how to join this mailing list and related information.

Message: #00841


< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First

[EP-tech] Re: Random question: Eprint core fields


In Perl, you can only store scalars inside lists or hashes. If you try
to directly store arrays inside an array, as follows-

my @alphas = ("a", "b", "c", "d");
my @nums = (1, 2, 3, 4);

my @test = (@alphas, @nums);

Both arrays get folded into one long array, ("a", "b", "c", "d", 1, 2,
3, 4). You have to store the memory address (reference) of the list
instead, which adds all this confusion and complexity, as you then need
to 'de-reference' the address to actually treat it like an array
again.

If you want to get a good grasp of Perl development, the best book
available at the moment is Modern Perl - it's available online for free
and explains references lucidly.

Yuri <yurj@alfa.it> writes:

> Il 04/07/2012 17:19, Sebastien Francois ha scritto:
>> Yuri,
>>
>> This will work:
>>
>> print $eprint->get_value( 'creators' )->[0];
>>
>> Or:
>>
>> print $eprint->get_value( 'creators' )->[0]->{name}->{given};
>>
>> (but that's not very pretty! :-))
>
> ->[0] is orrible and unthinkable :-)
>
>>
>> Perhaps you're confusing array and array refs:
>>
>> my @array = ( 'hello', 'world' );
>> my $arrayref = [ 'hello', 'world' ];
>
> I thought they was the same! :-o
>
>>
>> # both prints 'hello':
>> print $array[0];
>> print $arrayref->[0];
>
> Thanks for the precious info! I've still a lot to learn about perl.
>
> I love python but perl can still do a lot :-P
>
>>
>> Seb.
>>
>> On 04/07/12 16:12, Yuri wrote:
>>> I agree. I  perl you can have an array, but [0] return error. If you
>>> cicle on it, you get the results.
>>>
>>> You can try it with $eprint->get_value( 'creators' )[0]<- does not work
>>>
>>> returning $eprint->get_value( 'creators' ) gives an ARRAY *hex number*
>>>
>>> foreach my $c ( @{$creators} )
>>>
>>> works.
>>>
>>> I don't know why :-)
>> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>> *** Archive: http://www.eprints.org/tech.php/
>> *** EPrints community wiki: http://wiki.eprints.org/
>
> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
> *** Archive: http://www.eprints.org/tech.php/
> *** EPrints community wiki: http://wiki.eprints.org/