【发布时间】:2019-03-15 21:20:54
【问题描述】:
我正在构建一个程序,其中包含多个我希望能够反复使用的例程。哦,我也是 perl 的绝对初学者,所以就是这样。所以,我有数组,我用从文件中提取的文本行填充,以便我可以解析、修改、比较等,使用用户输入或从(一个)其他文件中提取的其他数据位,具体取决于在部署子程序的程序上。
所以,我有一个子例程,我将三个数组引用传递给:
@sorted = &sort_arrays(\@order, \@ktms, \@sorted);
我在传入 sub 后取消引用数组以进行如下所示的健全性检查:
sub sort_arrays {
my ($ref_array, $list_array, $sorted_r) = @_;
print "@{$ref_array} \n"; print "@{$list_array} \n"; print "@{$sorted_r} \n";
然后我将每个数组的每个单元格的值打印在一行上,每个单元格之间有一个空格。伟大的!实际上,我将此作为一个单独的程序工作,以根据随机值出现在主控中的顺序对来自主控的随机生成文件进行排序。现在,我正在尝试使其他子例程通用且可通过引用重用,但在取消引用它们时我没有同样的运气。例如:
@that = &get_ktms_from_program(\@this, \@that);
但是,当我尝试取消引用它们时,我得到了坏消息!
print "\nEntered get_lines_from_program sub\n";
my ($lines_r, $parsed_r) = @_;
print "@{$lines_r}\n";
输出:
Entered get_lines_from_program sub
ARRAY(0x81c20dc)
因此,出于某种原因,我无法使用之前使用的相同方法取消对 THIS 数组的引用。是什么赋予了? TIA 的帮助!
【问题讨论】:
-
无需使用
&调用子程序;事实上,它可能会产生您可能不想要的其他效果,如 perlsub 中所述。 -
哇!使当前@_ 对被调用的子程序可见?!?棒极了!但是,我从主程序调用每个子程序。我确实利用@ARGV 来提取文件名;不过,我认为这里不会发生这种情况。也许,但不确定。我会在引用之前检查我的数据,以确保在引用它们之前我的数组中没有数组引用。这些多维数组和散列很密集!
-
如果你得到
Entered get_lines_from_program sub ARRAY(0x81c20dc),那是因为@this包含一个引用数组的元素。换句话说,您没有向我们展示的代码中似乎存在错误
标签: perl reference dereference