Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 循环遍历变量以检查是否已定义_Perl - Fatal编程技术网

Perl 循环遍历变量以检查是否已定义

Perl 循环遍历变量以检查是否已定义,perl,Perl,我试图检查一组变量,以确保它们已定义。我想我应该把变量名放在一个数组中,然后在数组上循环检查是否定义了每个变量。然而,据我所知,对词汇变量(由“my”定义)使用符号引用是不起作用的 在Perl中是否有一种方法可以检查是否定义了大量词汇变量,而不必手动将每个变量名放入已定义的语句中?如果我可以创建一个数组或其他东西来保存我希望检查其定义状态的变量的名称,那就更好了。还可以在数组中对var进行引用 my @vars = ( [ '$x', \$x ], [ '$y', \$y ],

我试图检查一组变量,以确保它们已定义。我想我应该把变量名放在一个数组中,然后在数组上循环检查是否定义了每个变量。然而,据我所知,对词汇变量(由“my”定义)使用符号引用是不起作用的


在Perl中是否有一种方法可以检查是否定义了大量词汇变量,而不必手动将每个变量名放入已定义的语句中?如果我可以创建一个数组或其他东西来保存我希望检查其定义状态的变量的名称,那就更好了。

还可以在数组中对var进行引用

my @vars = (
   [ '$x', \$x ],
   [ '$y', \$y ],
   [ '$z', \$z ],
);

for (@vars) {
   my ($name, $ref) = @$_;
   print("$name is undefined\n") if !defined($$ref);
}

我不明白在包含变量时包含名称有什么困难。另一种方法是让PadWalker扫描内部构件。我不会在生产中使用它,但它在调试工具中很有用。

听起来您需要重新考虑代码的结构。拥有大量这样的词汇变量意味着一个糟糕的设计——它们是否应该不存在于散列或数组中?然后,可以对它们进行更简单的迭代。

谢谢,这正是我不太明白的方法!如果我想对数组做同样的事情,我会做一些非常相似的事情:my@vars=(['@x',\@x],'@y',\@y],'@z',\@z],);对于(@vars){my($name,$ref)=@$; print($name未定义\n)),如果(@code>print($name为空\n)),但是是的。