What does it mean when you try to print an array or hash using Perl and you get, Array(0xd3888)?

前端 未结 3 1443
余生分开走
余生分开走 2020-12-06 17:08

What does it mean when you try to print an array or hash and you see the following; Array(0xd3888) or HASH(0xd3978)?

EXAMPLE

CODE

my @data =          


        
3条回答
  •  时光说笑
    2020-12-06 17:40

    It means you do not have an array; you have a reference to an array.

    Note that an array is specified with round brackets - as a list; when you use the square bracket notation, you are creating a reference to an array.

    foreach my $line (@data)
    {
        my @array = @$line;
        print "$array[0] - $array[1] - $array[2]\n";
    }
    

    Illustrating the difference:

    my @data = (
    ['1_TEST','1_T','1_TESTER'],
    ['2_TEST','2_T','2_TESTER'],
    ['3_TEST','3_T','3_TESTER'],
    ['4_TEST','4_T','4_TESTER'],
    ['5_TEST','5_T','5_TESTER'],
    ['6_TEST','6_T','^_TESTER']
    );
    
    # Original print loop
    foreach my $line (@data)
    {
        chomp($line);
        @random = split(/\|/,$line);
        print "".$random[0]."".$random[1]."".$random[2]."","\n";
    }
    
    # Revised print loop
    foreach my $line (@data)
    {
        my @array = @$line;
        print "$array[0] - $array[1] - $array[2]\n";
    }
    

    Output

    ARRAY(0x62c0f8)
    ARRAY(0x649db8)
    ARRAY(0x649980)
    ARRAY(0x649e48)
    ARRAY(0x649ec0)
    ARRAY(0x649f38)
    1_TEST - 1_T - 1_TESTER
    2_TEST - 2_T - 2_TESTER
    3_TEST - 3_T - 3_TESTER
    4_TEST - 4_T - 4_TESTER
    5_TEST - 5_T - 5_TESTER
    6_TEST - 6_T - ^_TESTER
    

提交回复
热议问题