Perl: Ziehen Paare von Werten aus einem array

Betrachten

#!/usr/bin/perl
use strict;
use warnings;

while(<DATA>) {
  my($t1,$t2,$value);
  ($t1,$t2)=qw(A P); $value = $1 if /^$t1.*$t2=(.)/;
  ($t1,$t2)=qw(B Q); $value = $1 if /^$t1.*$t2=(.)/;
  ($t1,$t2)=qw(C R); $value = $1 if /^$t1.*$t2=(.)/;
  print "$value\n";
}

__DATA__
A P=1 Q=2 R=3
B P=8 Q=2 R=7
C Q=2 P=1 R=3

Ich würde gerne ersetzen die Wiederholung mit einer eleganten Schleife über Paare von $t1,$t2 gespeicherten Werte in einem array (oder anderen Struktur) wie ein

my @pairs = qw (A,P   B,Q   C,R);
my @pairs = qw (A P   B Q   C R);

Habe ich nicht viel Erfolg hatte mit einer kurzen Versuch zu kombinieren, die while, split und unshift.

Was prägnant, elegante Lösung bin ich?


P. S. ich habe die hashes in der Vergangenheit, sondern finden die %h = (A=>'P', B=>'Q', C=>'R') syntax "laut". Es ist auch hässlich, zu verlängern triplets, quads ...

  • Sie brauchen nicht die hash-syntax, um einen hash. %h = qw/A P B Q C R/; wird genauso gut funktionieren, solange es eine gerade Anzahl von Elementen.
  • +1 vielen Dank für den Hinweis.
Schreibe einen Kommentar