Thread Foreach lässt sich nicht speichern !! (3 answers)
Opened by tobi14 at 2011-03-20 17:13

Linuxer
 2011-03-20 17:21
#146677 #146677
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Code (perl): (dl )
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;


Edit:
Vorschlag zum Probieren:

Code (perl): (dl )
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";

Last edited: 2011-03-20 17:50:57 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Foreach lässt sich nicht speichern !!