Perl,将数组传递给子程序,处理未声明的变量

时间:2017-01-13 12:51:03

标签: arrays perl subroutine

我有一个带有一些坚定的变量和变量的sub我在sub中声明和使用,但当我调用这个sub时我无法声明它们。

例如:

18:08:32 error: Invalid argument: cannot open transport registration       
socketpair
18:08:32 could not read ok from ADB Server
18:08:32 * failed to start daemon *
18:08:32 error: cannot connect to daemon
18:08:32 'C:\Users\samarc\AppData\Local\Android\Sdk\platform- 
tools\adb.exe,start-server' failed -- run manually if necessary

当我尝试时,我收到了错误

  

"在test.pl行的字符串eq中可以使用未初始化的值$   ..."

我该如何纠正?

2 个答案:

答案 0 :(得分:3)

这不是声明的问题。如果只将两个参数传递给以

开头的子程序
    my ( $firm1, $firm2, $possible ) = @_;

然后$possible 未定义,这意味着它设置为特殊值undef,类似于NULLNone,{ {1}}等用其他语言

如您所见,您无法在不产生警告消息的情况下比较未定义的值,您必须先使用nil运算符检查是否已定义变量

您想测试defined是否已定义并设置为字符串$possible。你可以这样做

smth

答案 1 :(得分:2)

这不是声明的问题,而是传递未定义的值。

有几种方法可以解决这个问题:

  • 在变量
  • 上测试$possible //= "default_value"
  • 如果未定义,则设置'默认'{{1}}将有条件地分配。

或完全做其他事情。