为了账号安全,请及时绑定邮箱和手机立即绑定

请问在perl用push需要什么modul呢?

请问在perl用push需要什么modul呢?

慕莱坞森 2022-02-19 17:11:49
我在用perl读取文件时想建立一个一个二维数组,找匹配的行想把整行记录在一个二维数组中,可每次都不成功,部分代码如下,请那位大侠看一下,不甚感激:代码如下:$array2=[ ["good","just so so","bad"],["good","just so ","bad"],]open INFILE,"<".$file_path.$file_name or die "can't open the file!\n";while($lines=<INFILE>) { @array1=split '',$lines;push @array2,[@array1];}可是读取值却报错,我读取的方法是“print $array2->[2][1]"运行说没有初始化或定义,怎么回事?关键问题是动态数组产生不了,但是调用初始化没问题,print $array2->[2][1] 显示good。
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

Perl中没有所谓的二维数组,Perl中的二维数组实际上是引用,用@开头是不对的,
$array2=[ ["good","just so so","bad"],
["good","just so ","bad"],
]
建立了一个引用,
但是问题是,楼主在引用这个数据的时候,想使用列表上下文(?),把引用改成列表的时候,应该是@$array2,对吧。
但你在循环里使用了@array2,它原本没有定义,你一使用就定义了,定义了之后,你又调用$array2[2][1],这个调用实际上调用了@array2数组,而不是引用,引用的引用名和第一个[2]之间要有->,不然调用的是数组,因为你调用了数组,所以[2][1]就是没有定义的了。
这个具体的建议你看一下Perl关于引用的详细内容,还有引用用在复杂数据结构上时应该注意的。

查看完整回答
反对 回复 2022-02-21
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

perl用push根本不需要什么modul
二维数组,不能那么写。而且只有两行,哪来的[2]}[1]?

@array2=( [1, 2, 3, 4],
[5, 6, 7, 8],
[9, 0, 1, 2] );

print ${$array2[2]}[1]."\n\n";

查看完整回答
反对 回复 2022-02-21
?
达令说

TA贡献1821条经验 获得超6个赞

用的是引用,初始化没错,不过[2] 的确不存在,
push 是perl的内建函数 ,不用module,
应该是 push @array2,@array1;
push 第二个参数可以直接是数组,不应该是引用。

查看完整回答
反对 回复 2022-02-21
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信