【发布时间】:2011-08-27 12:47:32
【问题描述】:
我正在寻找一种方法来清除 Perl 程序中的所有数组。
目前,我正在调用一个显式“重置”所有数组的子程序:
sub clear_arrays{(@array1,@array2,@array3)=((),(),());}
这迫使我找到程序中的所有数组并在子例程中逐字引用它们。
我查看了 reset、undef 和 delete 的 perldoc,但无法以清除所有数组的方式解释它们。
是否有 Perl 的内置函数可以做到这一点?
如果没有,是否有一个函数会返回一个包含所有数组变量的数组?
例如:
my @prog_arrays = getarrays();
foreach(@prog_arrays){$_ = ();}
getarrays() 可能是一个内置的 Perl 函数,它返回程序中任何/所有已初始化的数组。
编辑:
我的特殊情况只涉及两个需要重置的全局数组。我出于好奇而不是必要性扩大了这个问题。基本上,我的全局变量是
@email_subject 和@email_msg。
随着脚本的进展和数据的收集/分析,它们的值被推送到其中。在脚本结束时,将发送电子邮件消息,并且脚本可能会根据循环条件变量再次运行。
如果它再次运行,我需要清除这 2 个全局变量,以便它们可以在下一个循环周期中再次聚合。通过字面量引用清除这两个数组并没有害我死,但我只是想知道 Perl 是否已经有一些内置函数可以在不直接引用它们的情况下清除数组。
这可能不是实现此目的的最佳方式,但这是我考虑的第一个直观选项。
【问题讨论】:
-
不是一个答案,只是一个建议(它适用于我处理的每种语言):只需根据需要管理每个对象的范围和生命周期。对象的聚合/组合(“OO”或其他)和全局变量的消除/减少简化了设计。
-
三个赞成票让我担心。有些人想要这样做。切勿在未锁车门的情况下开车
-
这个问题寻求一种方法来规避 Perl 的内置保护以防止不良编程。可悲的是有人想帮忙