将引用和字符串传递给子例程

时间:2013-05-13 21:43:13

标签: perl

我正在尝试将对数组的引用和字符串传递给表单中的函数;

&function2(\g_array, "String");

在我的子程序中,我想要尊重数组,以便我可以评估/打印它,但是当我尝试这样做时,它会抱怨我在使用strict时无法将字符串映射到数组。这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

您忘记了当前范围内的use strict。它会警告你:bareword "g_array" not allowed

如果g_array是一个函数,则\g_array将解析为\(g_array())。如果不是,则解析为\"g_array"。所以你实际上是在传递一个字符串的引用。

你想要的是传递一个arrayref?只需在变量中包含@ sigil:

function2(\@g_array, "String");

答案 1 :(得分:3)

如果你使用strict,你应该经常这样做,你会看到这个错误:

  

使用“严格潜艇”时不允许使用Bareword“g_array”

这意味着:g_array,没有印记,是一个“赤字”。如果没有打开限制,裸字就会变成字符串。 (假设它们不是函数的名称。)你所做的是引用字符串"g_array"

要引用数组,请使用\@g_array

此外,除非您知道为什么要这样做,否则通常没有理由在函数名称前面使用&