相关疑难解决方法(0)

如何将字符串化版本的数组引用转换为Perl中的实际数组引用?

有没有办法让Perl将数组引用的字符串化版本(例如ARRAY(0x8152c28))转换为实际的数组引用?

例如

perl -e 'use Data::Dumper; $a = [1,2,3];$b = $a; $a = $a.""; warn Dumper (Then some magic happens);'
Run Code Online (Sandbox Code Playgroud)

会屈服

$VAR1 = [
      1,
      2,
      3
    ];
Run Code Online (Sandbox Code Playgroud)

perl

10
推荐指数
3
解决办法
2420
查看次数

Perl:从内到外打开列表不起作用?

$all="{this, {is, some, {deeply, nested}, text}, for, you}";
while ($all=~s/{([^{}]*?)}/f($1)/seg) {}
sub f {return \{split(",",$_[0])};}
print @{$all};
Run Code Online (Sandbox Code Playgroud)

我希望$ all是一个listref,其列表包含:

{this, [reference to array], for, you}
Run Code Online (Sandbox Code Playgroud)

相反,@ {$ all}是空的.

我确信这是基本的,但我做错了什么?

注意:我有意"高举"代码在这里发布(即显示问题的最小代码).更广泛的版本是:https://github.com/barrycarter/bcapps/blob/master/playground.pl

编辑:感谢所有回答的人!笔记:

  • 真正的f()有副作用,更新dbs等,所以我真的必须调用它.它不仅仅是将列表更改为其他内容.我不好意思没有提到这一点.

  • 我从Mathematica导出所以"{a,b,c}"是一个列表,而不是哈希.再次,mea culpa没有提到这一点.

  • 我知道执行此操作的"正常"方式是递归的:处理每个元素,如果元素是列表,则在列表本身上调用f().我试图"展开"递归以避免拆分嵌套的"{".如果你在里面工作,你就不必在解析时计算"{".

  • 一个有趣的其他应用程序将是一个单行的XML解析器(差不多).

  • 给geekosaur一个复选标记,指出哪里出错了,为什么我的方法可能是错误的.

  • 我想我会尝试解析器方法,甚至是jrey的s/{/ [方法.

perl

2
推荐指数
1
解决办法
177
查看次数

标签 统计

perl ×2