Perl警告和正则表达式的问题在正则表达式编译中使用未初始化的值

0 regex perl warnings initialization

我从我的主要Perl程序调用以下脚本.该脚本采用进程名称并返回其PID.该脚本包含在我的主要perl代码中,使用require关键字:

require "getPid.pl";
Run Code Online (Sandbox Code Playgroud)

并使用:

&pidGetter($processName);
Run Code Online (Sandbox Code Playgroud)

getPid.pl是:

#!/usr/bin/perl -w

use strict;
use warnings;

use Proc::ProcessTable;

pidGetter($ARGV[0]);

sub pidGetter
{
   my $ret="PROCESS ID NOT FOUND\n";
   my $t = new Proc::ProcessTable;
   my $procName = $_[0];

   foreach my $p (@{$t->table})
   {
      if ($p->fname =~ /$procName/)
      {
         $ret = $p->pid;
      }   
   }

   return $ret;
}          
Run Code Online (Sandbox Code Playgroud)

但是,当调用脚本时,我收到以下警告:

在getPid.pl第19行的regexp编译中使用未初始化的值$ procName

脚本的其余部分似乎运行正常.我的理解是$ procName由$ procName =&_ [0]初始化;

我已将print语句放入调试中,并$procName确实返回一个值,因此它已初始化.有谁知道为什么我收到这些警告?

Eug*_*ash 6

require "getPid.pl";评估包含在中的代码getPid.pl.所以你实际上调用了pidGetter()两次函数:在require'd脚本和主脚本中.由于$ARGV[0]undef内部require倒是剧本,你会得到警告.