在Perl模块中清空动态创建的数组

时间:2011-07-21 22:33:57

标签: perl cgi

嗨,大家需要一些关于模块的帮助,并在另一个模块中清空动态创建的数组。

我有1个perl文件和2个perl模块(我已创建)

//file.pl

use ABC;
use XYZ;

for(qw/US UK China India France/)
{
   ABC::fetchData // This will create array varialbes
   XYZ::calculateYield 
    // This will use arrays dynamically created from fetchData
    // At this point, when i return I want a new copy of the array used in XYZ.pm's calculateYield function 
}

这是ABC.pm的一个例子

//ABC.pm
package ABC;

our @mainArray;

sub fetchData
{
  // connect to database and fill up the @mainArray;
  @mainArray = qw/a b c d e f/;

}

1;

这是XYZ.pm

的一个例子
//XYZ.pm
package XYZ;

sub calculateYield
{

  foreach my $eachelement ( @ABC::mainArray)
   {
       push @{$eachelement), "some_data_that_changes_every_time_from India, UK, US, France or China";
   }

}

现在,问题出在这里,我想在每次调用(strong> for(1..5)后清空数组“ @ {$ eachelement} ”,因为 $ eachelement 在每个计数中保持不变。只有在XYZ模块中推送到 push @ {$ eachelement)的数据值才会根据值(美国,英国,中国,印度,法国)而变化。

该组的问题是,有没有办法在名称动态创建的模块中清空一个数组。例如,我想在每次完成for循环后清除XYZ.pm中的 @ {$ eachelement}

希望我以一种可以理解的方式表达它。如果你有更好的解决方案或我可以使用的其他东西,我愿意这样做。如果问题或代码的任何部分不清楚,请回复我。

PS:我不是在寻找一个小错误或拼写错误,这只是一个示例代码。我只是想知道如何做到这一点。

感谢您提前得到的帮助。

1 个答案:

答案 0 :(得分:-1)

我环顾四周,找到了解决这个特殊问题的方法。我定义了一个全局函数

sub clear
{
       for my $ref (values %MSQL::) 
    {
        @{$ref} = ();
    }
}

感谢大家的支持。

@Patrick,这不是TYPO错误。就像我说我在寻找逻辑。