Leser: 24
1
2
3
4
5
6
7
8
9
10
11
12
13
my$ausgabe;
my$chr;
sub test{
chomp (my $text = "-. .-- -.);
foreach(split(/[^\.|\-]+/, $input)) {
foreach my $chr (keys(%mcode)) {
print $chr if($mcode{$chr} eq $_); #<= hier soll $chr in eine Variabel außerhalb der Sub gespeichert werden
}
}
}
$ausgabe = $chr;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
my $ausgabe; my $chr; sub test { chomp( my $text = "-. .-- -." ); # schliessendes " ergaenzt # woher kommt $input? koennte es auch $text sein? foreach( split(/[^\.|\-]+/, $input) ) { # hier wird ein eigenes $chr als Laufvariable definiert; das ist unabhaengig vom Aeusseren! foreach my $chr ( keys %mcode ) { print $chr if( $mcode{$chr} eq $_ ); #<= hier soll $chr in eine Variable außerhalb der Sub gespeichert werden # $chr ist die Laufvariable der inneren schleife; damit kommst Du # so an die auessere Variable $chr nicht mehr ran... # Benenne die Laufvariable um und weise der aeusseren $chr den # Wert zu, wenn es notwendig ist. } } } $ausgabe = $chr;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
#! /usr/bin/perl use strict; use warnings; my $ausgabe = 'nichts'; my %mcode = ( 'strichpunkt' => '-.', 'punktstrichstrich' => '.--', ); sub testing { # Eingabe einlesen chomp( my $input = '-. .-- -.' ); # Eingabe an allem, was nicht "." oder "-" ist, splitten # und Stuecke einzeln verarbeiten; # "." muss nicht maskiert werden in Zeichenklasse # "-" auch nicht, wenn es am Anfang oder am Ende steht. # '|' braucht es in Zeichenklassen nicht, um ein "ODER" auszudruecken for my $piece ( split /[^.-]+/, $input ) { for my $chr ( keys %mcode ) { if ( $mcode{$chr} eq $piece ) { # wird bei jedem Treffer bis Ende der Schleifen ueberschrieben $ausgabe = $chr; # Kontrollausgabe print "waehrend: $ausgabe\n"; } } } } # Kontrollausgabe print "vorher: $ausgabe\n"; testing(); # Kontrollausgabe print "nachher: $ausgabe\n";