Проблема с предупреждениями Perl и регулярным выражением Использование неинициализированного значения при компиляции регулярного выражения - PullRequest
0 голосов
/ 24 декабря 2010

Я вызываю следующий скрипт из моей основной программы Perl. Сценарий берет имя процесса и возвращает его PID. Сценарий включен в мой основной Perl-код, используя ключевое слово require:

require "getPid.pl";

и вызывается с помощью:

&pidGetter($processName);

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;
}          

Однако, когда вызывается скрипт, я получаю следующее предупреждение:

Использование неинициализированного значения $ procName при компиляции регулярного выражения в строке getPid.pl 19

Остальная часть скрипта работает нормально. Насколько я понимаю, $ procName инициализируется $ procName = & _ [0];

Я добавил операторы print для отладки, а $procName возвращает значение, поэтому оно инициализируется. Кто-нибудь знает, почему я получаю эти предупреждения?

1 Ответ

6 голосов
/ 24 декабря 2010

require "getPid.pl"; оценивает код, содержащийся в getPid.pl.Таким образом, вы на самом деле вызываете функцию pidGetter() дважды: в сценарии require 'd и в основном сценарии.Поскольку $ARGV[0] равно undef внутри скрипта require, вы получите предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...