我可以将看起来像数组内容的字符串转换为数组吗?

Cra*_*aig 3 arrays string perl split

我从一个文本文件中读取了一个字符串,这相当于我用以下格式声明它:

$string = '["Item1_Field1","Item1_Field2","Item1_Field3"],["Item2_Field1","Item2_Field2","Item2_Field3"],["Item3_Field1","Item3_Field2","Item3_Field3"],["Item4_Field1","Item4_Field2","Item4_Field3"]';
Run Code Online (Sandbox Code Playgroud)

(实际的字符串包含大约600个项目和大约50个字段)我要做的是获取是项目和字段的二维(嵌套)数组,以便我可以使用以下内容引用它们:

print $ItemsAndFields[1][2]
Run Code Online (Sandbox Code Playgroud)

这将导致(允许从零开始的数组):

Item2_Field3
Run Code Online (Sandbox Code Playgroud)

我发现字符串的格式与你在Perl中声明一个数组的格式非常相似,所以我希望有类似下面的内容允许我直接将项目分配给一个数组:

@ItemsAndFields = magicfunction( $string );
Run Code Online (Sandbox Code Playgroud)

但我找不到任何合适的东西,允许我以这种方式使用字符串.

我可以看到这样做的唯一方法是使用split函数两次来创建这个数组的数组.以下是未经测试的,只是我头脑中正在进行的工作:

$string =~ s/\[//g;
my @items = split(/\],*/, $string);
my @ItemsAndFields = split(/\,/, $string);
Run Code Online (Sandbox Code Playgroud)

我尝试查看eval()函数,使用{}引用以及搜索此站点,但很难知道我需要搜索什么.

任何帮助表示赞赏,我是Perl的新手.

Mis*_*rEd 5

my $arrayRef = eval "[$string]";
Run Code Online (Sandbox Code Playgroud)

会给你:

$arrayRef = [
      [
        'Item1_Field1',
        'Item1_Field2',
        'Item1_Field3'
      ],
      [
        'Item2_Field1',
        'Item2_Field2',
        'Item2_Field3'
      ],
      [
        'Item3_Field1',
        'Item3_Field2',
        'Item3_Field3'
      ],
      [
        'Item4_Field1',
        'Item4_Field2',
        'Item4_Field3'
      ]
    ];
Run Code Online (Sandbox Code Playgroud)

你可以这样访问:

my $item2Field3 = $arrayRef->[1]->[2];
Run Code Online (Sandbox Code Playgroud)