我有一个应该从系统命令读取输入的 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/