2009-06-30 13 views
1

folgend ist das Skript für regex passenden und mit dem Wert in dem Array zu speichern:Wie kann ich mehrere Regex-Übereinstimmungen mit Perl zu einem Array-Element zusammenführen?

sub b1 { 
    # print $_; 
     my @file = @_; 
     my @value; 
     my $find = qr/(\s+)([0-9]+)\s([A-Z])\s[0-1].[0-9]+\s->\s([A-Z])\s/; 
     foreach my $file(@file){ 
      push (@value, $file=~ /$find/) ; 
      print "\n"; 
     } 
     return @value; 
    } 

    my @array_b1 = b1(@body); 
    print "@array_b1 \n"; 

__DATA__ 

     28 C 0.510 -> L 0.923 
     30 S 0.638 -> A 0.527 
     31 A 0.496 -> P 0.952 

__OUTPUT__ 

28 C L   30 S A   31 A P 

während Werte von regex Erfassung und ein Array, wird das Skript speichert Werte in aufeinanderfolgenden Elementen in der Matrix, dh der obigen Anordnung speichernde Elemente aufweist:

@array[1]=28 
@array[2]=C 
@array[3]=L 
@array[4]=30. 

Stattdessen möchte ich die von der Regex erfassten Werte in demselben Array-Element speichern. Das ist:

@array[1]=28CL 
@array[2]=30SA 

Was ist der beste Weg, das zu tun?

+0

In Perl5, Array-Elemente $ verwenden, nicht @: $ array [1], $ array [2] usw. Es gibt einige Orte, die Sie @array sagen kann [1] statt, ohne sie zu brechen, aber nicht überall (weshalb @array [1] Ihnen eine Warnung gibt - Sie haben Warnungen eingeschaltet, ja?) – ysth

+0

Haben Sie überlegt, ein Buch zu kaufen? http://books.perl.org/category/7 –

+0

@sinan unur: Ich habe bereits ein Buch. Danke für den Vorschlag. Wissen Sie, warum die Regex Informationen abgleicht und erfasst und sie als aufeinander folgende Elemente platziert? – shubster

Antwort

8
push(@value, join('', $file =~ /$find/));