linux - 局部变量遥不可及

标签 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 的显式包名称,尽管它们已经被分配了。对解决方案的任何指导将不胜感激。

最佳答案

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

关于linux - 局部变量遥不可及,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963032/

相关文章:

perl - unix df 上的正则表达式帮助

perl - 如何为同一发行版中的多个 Perl 模块设计单元测试?

perl - 如何使 Mojolicious 的 url_for()->to_abs() 在 nginx 后面返回正确的方案(http 或 https)

regex - 谁能在我的 Perl 循环中发现问题?

c++ - 堆上的类内的 Linux fork

c - 如何编写信号处理程序来捕获 SIGSEGV?

c++ - 使用 UDP 连接到服务器

php - 从控制台/命令行调用 PHP 不起作用

linux - Linux 上保存应用程序配置的好地方在哪里

linux - Glob 是不同的值错误打开文件和读取