加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 是否有内置函数来清除所有变量值

发布时间:2020-12-15 23:31:37 所属栏目:大数据 来源:网络整理
导读:我正在寻找一种方法来清除Perl程序中的所有数组. 目前,我正在调用一个明确“重置”所有数组的子例程: sub clear_arrays {(@ array1,@ array2,@ array3)=((),(),());} 这迫使我找到程序中的所有数组,并在子程序中逐字引用它们. 我已经查看了perldoc的reset,u
我正在寻找一种方法来清除Perl程序中的所有数组.

目前,我正在调用一个明确“重置”所有数组的子例程:

sub clear_arrays {(@ array1,@ array2,@ array3)=((),(),());}

这迫使我找到程序中的所有数组,并在子程序中逐字引用它们.

我已经查看了perldoc的reset,undef和delete但是无法以清除所有数组的方式解释它们中的任何一个.

是否有Perl的内置函数可以做到这一点?

如果没有,是否有一个函数可以返回所有数组变量的数组?

例如:

my @prog_arrays = getarrays();
foreach(@prog_arrays){$_ = ();}

其中getarrays()可能是一个内置的Perl函数,它返回程序中的任何/所有初始化数组.

编辑:
我的特殊情况只涉及两个需要重置的全局数组.我出于好奇而不是必要而扩大了问题.基本上,我的全局变量是@email_subject& @email_msg.

随着脚本的进展和数据的收集/分析,它们会将值推入其中.在脚本结束时,将发送电子邮件消息,并且脚本可能会再次运行,具体取决于循环条件变量.

如果它再次运行,我需要清除这两个全局变量,以便它们可以在下一个循环周期中再次聚合.通过文字引用清除这两个数组并没有让我感到害怕,但我只是想知道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
}

对于所讨论的阵列,效果是相同的,但它不会冒任何你不打算破坏的风险.您甚至可以使用我而不是第二个示例,而第一个示例要求变量位于符号表中(也就是我们的定义).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读