我有一个可以解析某些XML的循环。在这个循环中,有几个循环,如果某些值都存在,我创建一个数组,并把值这样的:如何在函数或循环中创建可用变量:strict on
for (@{ $product->{$basename} }) {
# there are two values for PACKAGE. create a unique list for each value
$package = $_->{PACKAGE};
if ($package eq "RETAIL") {
...values read from xml...
push (@myListRetail, [$one, $two, $three];
}
if ($package eq "ADVISOR") {
...values read from xml...
push (@myListAdvisor, [$one, $two, $three];
}
主要的XML解析后环路关闭,我再测试的存在这些阵列,并把它们放到一个新的阵列:
# add this array to the package name array
if (@myListRetail) {
push @packageNames, \@myListRetail;
}
# add this array to the package name array
if (@myListAdvisor) {
push @packageNames, \@myListAdvisor;
}
这是一切都很好,简单,有效。
但是,我没有用:strict on。当我打开它时,我得到“显式包”警告,因为我创建的数组没有“我的”。
我没有将它们预先声明为“my @ myListRetail”等,在循环之外,因为我需要测试它们的存在。如果我在循环中用“我的”声明它们,它们是有限的,我无法得到它们。
我知道我应该严格遵守,但是当我这样做时,脚本会因为“我的”错误而中断。
如何在一个循环中定义和创建一个变量,我可以在循环(或函数或任何其他范围)之外使用并仍然在脚本的其他地方使用它?
为什么不测试它们是否为空?或者把数组放在它们各自的键下('RETAIL'和'ADVISOR'),这样你可以删除一些重复的代码。 – Biffen 2014-12-05 14:56:28
我确实试图看看它们是否是空的,但我必须有一些语法错误。我会再看一遍。 – dbonneville 2014-12-05 15:31:44
'if(@myListRetail> 0)' – Biffen 2014-12-05 15:33:22