2
$hashdef = "Mouse=>Jerry, Cat=>Tom, Dog=>Spike";

%hash = split /,|=>/, $hashdef;

print "$_=>$hash{$_}" foreach(keys %hash);

Mouse=>JerryDog=>SpikeCat=>Tom

私はPerlが初めてです。分割関数内の正規表現を説明できる人はいますか? 両方の選択肢として使用されていることはわかり|ましたが、まだ混乱していました。

%hash = split /|=>/, $hashdef;

出力を取得します

S=>pe=>J=>eT=>or=>rm=>,y=>,u=>sM=>og=>D=>oC=>ai=>kt


%hash = split /,/, $hashdef;
Mouse=>Jerry=>Cat=>TomDog=>Spike=>

上記の条件を教えてください。

4

3 に答える 3

6

splitの最初の引数は、必要な要素を区切るものを定義します。

/,|=>/は、コンマ ( ,) または等号の後に大なり記号 ( =>) が続くものと一致します。ここでは単なるリテラルであり、特別なことは何もありません。

/|=>/長さゼロの文字列または等号の後に大なり記号が続くものと一致し、長さゼロの文字列で分割すると、文字列が個々の文字に分割されます。したがって、ハッシュでは、Mにマップされouにマップsされます。ハッシュには明確な順序がないため、出力ではごちゃごちゃして表示されます。

/,/コンマで区切るだけです。マップするハッシュと何もマップMouse=>Jerryしないハッシュを作成しています。Cat=>TomDog=>Spike

于 2013-05-19T17:24:04.803 に答える
0
sub hash2string {
   my $href = $_[0];
   my $hstring = "";
   foreach (keys %{$href}) {
      $hstring .= "$_=>$href->{$_}, ";
   }
   return substr($hstring, 0, -2);
}

sub string2hash {
   my %lhash;
   my @lelements = split(/, /, $_[0]);
   foreach (@lelements) {
      my ($skey,$svalue) = split(/=>/, $_);
      $lhash{$skey} = $svalue;
   }
   return %lhash;
}
于 2015-03-05T12:19:39.807 に答える