2014-11-01 68 views
1

任何人都可以请让我知道如何从一个标量变量(等同于散列引用)中创建一个数组ref?我到目前为止的代码是:Perl:在散列内部的标量变量中创建一个数组ref

#! /usr/bin/perl 
use strict; 

my $index=0; 
my $car={}; 

$car->{model}[$index]="Tesla"; 
my $texxt = $car->{model}[$index]; 
@{$texxt}=qw(1 2 3); 

print "@{$texxt}"; 

这提供了以下错误: 不能使用字符串(“特斯拉”)的数组引用,而“严格裁判”在使用中test99.pl线8。

基本上我试图让一个名为“@Tesla”的值(1 2 3)的数组(或数组参考)。

感谢您的帮助!

+0

我在确定你最终想要什么样的数据结构时遇到了一些麻烦。数组哈希?哈希哈希?你能详细说明吗? * c.f. * ['perldsc'](http://perldoc.perl.org/perldsc.html)。 – 2014-11-01 05:24:34

回答

1

:您可以指定一个匿名数组分配给它,虽然(和texxt作为短切参考该),那么这将工作

#! /usr/bin/perl 
use strict; 

my $index=0; 
my $car={}; 

$car->{model}[$index]="Tesla"; 
my $texxt = $car->{model} ; 
push @{$texxt} , [qw(1 2 3)]; 

print ref eq "ARRAY" ? "@{$_}" : "$_ " for @{$texxt} ; 

输出:Tesla 1 2 3

可以使用Data::Printer在一个很好的格式化的方式来查看所述数据结构:

use DDP; 
p $texxt; 

输出:

\ [ 
    [0] "Tesla", 
    [1] [ 
     [0] 1, 
     [1] 2, 
     [2] 3 
    ] 
] 

这可以帮助你想象什么是用perl做您的数据。

+0

谢谢。这有助于 - 我将它实现为散列或数组... – Hans 2014-11-01 18:56:47

0

如果$ texxt是一个字符串(它不是散列引用),那么不能将它解引用为一个数组。如果你想用一个所谓的“模式”键包含数组与“特斯拉”作为第一个元素,一个匿名数组作为第二个元素的哈希

$texxt = 'Tesla'; 
$texxt = [qw[ 1 2 3 ]];