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*$/);
    ...
}

これにより、3 つの部分がキャプチャされ、変数、 、および(...)に割り当てられます。$id$name$version

于 2013-02-22T11:06:23.600 に答える