数组 – 是否有内置函数来清除所有变量值
我正在寻找一种方法来清除Perl程序中的所有数组.
目前,我正在调用一个明确“重置”所有数组的子例程: sub clear_arrays {(@ array1,@ array2,@ array3)=((),(),());} 这迫使我找到程序中的所有数组,并在子程序中逐字引用它们. 我已经查看了perldoc的reset,undef和delete但是无法以清除所有数组的方式解释它们中的任何一个. 是否有Perl的内置函数可以做到这一点? 如果没有,是否有一个函数可以返回所有数组变量的数组? 例如: my @prog_arrays = getarrays(); foreach(@prog_arrays){$_ = ();} 其中getarrays()可能是一个内置的Perl函数,它返回程序中的任何/所有初始化数组. 编辑: 随着脚本的进展和数据的收集/分析,它们会将值推入其中.在脚本结束时,将发送电子邮件消息,并且脚本可能会再次运行,具体取决于循环条件变量. 如果它再次运行,我需要清除这两个全局变量,以便它们可以在下一个循环周期中再次聚合.通过文字引用清除这两个数组并没有让我感到害怕,但我只是想知道Perl是否已经有一些内置函数来清除数组而不是直接引用它们. 这可能不是实现这一目标的最佳方式,但这是我考虑的第一个直观选项. 解决方法
正如其他答案中所提到的,您的请求可以解决程序设计中存在的更大问题.您应该使用不在范围之外的词法,或者密切管理所有全局数组,并创建一个能够为您清除它们的函数.
如果你坚持打击命名空间中的每个数组,至少要小心并检查以确保你没有写过Perl可能需要的值: for (keys %::) { # for everything in `package main;` if (*{$::{$_}}{ARRAY}) { # if there is an array in the slot # clear it unless it is a "special" array @{$::{$_}} = () unless /^(?:INC|ISA|EXPORT|EXPORT_OK|ARGV|_|W)$/ } } 我会这样写它: my @global_arrays = our (@foo,@bar,@baz); sub clear_global_arrays { @$_ = () for @global_arrays } 对于所讨论的阵列,效果是相同的,但它不会冒任何你不打算破坏的风险.您甚至可以使用我而不是第二个示例,而第一个示例要求变量位于符号表中(也就是我们的定义). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |