我有一个文件,我已经读入一个数组,有多列,我想按第二列进行数字排序。下面是我使用的基本代码:
use strict;
use warnings;
use diagnostics;
my @arrayed = (
"\ndog", "10", "barks",
"\ncat", "20", "meows",
"\nfish", "5", "plop",
"\nant", "30", "walk",
);
print "@arrayed";
print "\n";
my @sortedarray = sort { $a->[1] <=> $b->[1] } @arrayed;
print "@sortedarray";
exit;
这给了我一个错误:
strict打开时,不能使用string(“dog”)作为数组引用。
我用其他文件尝试了一些其他的例子,但总是得到这个消息,所以我假设我的代码一定有本质上的错误。
有没有更有经验的人能指出我做错了什么,并允许我在保持行结构的同时按编号列进行排序?
2条答案
按热度按时间wljmcqd81#
你有一个平面数组,但你想要一个数组的数组:
输出:
cpjpxq1n2#
您的赋值不会创建多维数组:
你需要在括号中使用数组引用:
方括号
[ ... ]
创建匿名数组引用,然后可以存储在数组中。调试时需要了解的最重要的事情之一是数据的外观。做一些你做过的事
不是很有用,因为它只显示由空格分隔的元素的列表。另外,如果你用多维数组做了这个,你会得到这样的输出:
这就是数组引用字符串化时的样子。相反,您应该使用
Data::Dumper
模块:请注意,您正在打印对数组的引用。输出将是一个数据结构,看起来像toolic在他的答案中所显示的那样:
请注意,方括号再次表示数组引用。