2010-12-24 7 views
0

Ich rufe das folgende Skript aus meinem Perl-Programm. Das Skript erhält einen Prozessnamen und gibt seine PID zurück. Das Skript ist in meinem Haupt-Perl-Code enthalten, indem Sie die benötigen Schlüsselwort:Problem mit Perl Warnungen und Regex Verwendung von nicht initialisierten Wert in Regexp Kompilierung

require "getPid.pl"; 

und rief mit:

&pidGetter($processName); 

getPid.pl ist:

#!/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; 
}   

Wenn jedoch Das Skript wird aufgerufen, ich bekomme folgende Warnung:

Verwendung von nicht initialisierten Wert $ procName in regexp Kompilation bei getPid.pl Linie 19

Der Rest des Skripts scheint gut zu funktionieren. Ich verstehe, dass $ procName von $ procName = & _ [0] initialisiert wird;

Ich habe drucken Anweisungen zum Debuggen, und $procName gibt einen Wert zurück, so dass es initialisiert wird. Weiß jemand, warum ich diese Warnungen bekomme?

Antwort

6

require "getPid.pl"; wertet den in getPid.pl enthaltenen Code aus. Sie rufen also die Funktion pidGetter() zweimal auf: im require 'd Skript und im Hauptskript. Als $ARGV[0] ist undef innerhalb der require 'd Skript, erhalten Sie die Warnung.

+0

Vielen Dank das hat das Problem gelöst –

+0

Warum akzeptieren Sie diese Antwort nicht, es ist perfekt. – reinierpost

Verwandte Themen