0

我的要求如下:

我正在阅读 wmic 命令的输出,如下所示:

my @pnames = `wmic product where "Name like '%Provider%'" get IdentifyingNumber, Name,Version`;

print "@pnames";

到这里,输出如下:

IdentifyingNumber                        Name                                     Version

{E094B8EA-87B7-48DE-A0A8-A18AC8BFCDF4} .NET Data Provider for Teradata 14.00.0.0  14.00.0.0

{1551F9D6-1B14-4AE1-BABA-70A4319C236A}  ODBC Driver Provider                       14.00.0.0

处理数组

foreach $name ( @pnames )
{
  chomp($name);

  #@names = split('need to pass something',$name); 
  # I want to split every input entry   into 3 parts- IdentifyingNumber, Name,Version similarly the way they read.

  $name =~ s/^\s+//; #remove leading spaces
  $name =~ s/\s+$//; #remove trailing spaces

  # here logic goes this way, If the version number has matched, search for name and if name has matched display its identifying number 

  print "Identifying number(say $id) of the packge with name(say $pkg)\n";
}
4

1 回答 1

0

您可以通过匹配输入行来拆分

foreach my $line (@pnames) {
    my($id, $name, $version) = ($line =~ m/^\s*({.+?})\s+(.+?)\s+([\d.]+)\s*$/);
    ...
}

这将捕获三个部分(...)并将它们分配给变量$id和。$name$version

于 2013-02-22T11:06:23.600 回答