局部变量遥不可及

时间:2015-08-12 10:49:39

标签: linux perl

我有一个Perl脚本,它应该从系统命令读取输入,即service $service status,其中$service指向存储在数组结构中的用户输入。用户应该可以一次检查单个服务,例如 ssh 或多个服务,例如 ssh,named,cups ,其中服务由逗号分隔。然后,程序将服务拆分为一个数组,并为每个用户指定的服务调用该命令。

我的程序代码如下所示。

print "Please provide the service name that you wish to analyze (Named service):\n";

my $service_name_input = <>;
chomp($service_name_input);
my @service_list = split(/,/, $service_name_input);

foreach my $service (@service_list)
{
    open(my $service_input, '-|', "service", $service, "status");
}

while (my $line = <$service_input>)
{
    #Matches for "running".
    if ($line =~ m/(\(running\))/)
    {
        print "The service $service is running.\n";
    }
    #Matches for "dead".
    elsif ($line =~ m/(dead)/)
    {
        print "The service $service is dead.\n";
    }
}

这里的问题是程序需要在while语句中为$service_input显式包名,在打印时需要$service,尽管它们已经被分配了。任何有关解决方案的指导都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

$service_input$service仅在您for循环中可见,因为您在那里定义它。我认为您的while循环应该在for循环中移动。

您必须将代码更改为此

for my $service ( @service_list ) {

    open( my $service_input, '-|', 'service', $service, 'status' );

    while ( my $line = <$service_input> ) {

        if ( $line =~ /\(running\)/ ) {
            print "The service $service is running.\n";
        }
        elsif ( $line =~ /dead/ ) {
            print "The service $service is dead.\n";
        }
    }
}