Schrift
[thread]8827[/thread]

Parameterübergabe an sub

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
gamerzzz
 2007-03-12 09:56
#74913 #74913
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

wahrscheinlich saueinfach aber ich raffs nich - ich will halt die vordefinierte Variable $1 an eine sub übergeben - im Suchmuster der Sub wird $1 dann aber nicht ausgewertet:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use strict;

my $string = "testx_testy";
my $in = "(testx_)(testy)";

my $out = '$1';

test("$string","$in","$out");

sub test
{
my $sub_string = shift;
my $sub_in = shift;
my $sub_out = shift;

print "$sub_string <=> $sub_in <=> $sub_out \n";

$sub_string =~ s/$sub_in/$sub_out/g;
print "erg: $sub_string \n";
}


=> als print erg soll testx rauskommen, aber wie ich $1 auch maskiere, ich kriegs nicht hin. Wenn ich aber in der sub ein
$sub_out = "$1" hart setze funzt es.
Woran liegt es/kann ich das lösen/was hab ich übersehen ?

Danke vorab,
gruß gamerzzz\n\n

<!--EDIT|renee|1173686581-->
renee
 2007-03-12 10:05
#74914 #74914
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal aus:
Code: (dl )
$sub_string =~ s/$sub_in/$sub_out/g;
ein
Code: (dl )
$sub_string =~ s/$sub_in/$sub_out/eg;
(ungetestet)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
gamerzzz
 2007-03-12 10:29
#74915 #74915
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
...musste erst mal nachlesen, was e macht - hört sich gut an, funzt aber auch nicht ?!
Vielleicht anders gefragt:
Wenn ich eine Variable so definiere '$x' - wird der Status dann intern vermerkt und ist nicht mehr auflösbar ?
renee
 2007-03-12 10:35
#74916 #74916
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So geht's:
Code: (dl )
$sub_string =~ s/$sub_in/$sub_out/eeg;


Aber wäre es nicht schöner so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my $string = "testx_testy";
my $in = "(testx_)(testy)";

my $out = '1';

test($string,$in,$out);

sub test
{
 my $sub_string = shift;
 my $sub_in = shift;
 my $sub_out = shift;

 print "$sub_string <=> $sub_in <=> $sub_out \n";

 my @info = $sub_string =~ /$sub_in/;
 $sub_string =~ s/$sub_in/$info[$sub_out]/g;
 print "erg: $sub_string \n";
}
Dann muss man nicht mit der Evaluierung aufpassen\n\n

<!--EDIT|renee|1173688520-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
gamerzzz
 2007-03-12 10:49
#74917 #74917
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hey,
coole idee !!
Reicht mir erst mal ( obwohl es ja das Problem nur umschifft - trotzdem danke !!!!)
gamerzzz
 2007-03-12 11:16
#74918 #74918
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
...ohne nervern zu wollen:
bei etwas umfangreicheren Substitutionen wirds dann natürlich komisch - mit der Lösung kann ich ja nur einen bestimmten Output erzeugen - toll wäre, wenn der von aussen frei definierbar wäre ( so in der Art my $out = '$1_xyz_$4_$3';
gamerzzz
 2007-03-12 12:24
#74919 #74919
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
na ja, hab jetzt was drumrum gebastelt so in der Art:
my $out: 0_3_1_2_4-5-6_7';

und das dann auswerten:

my $new_string = "";
for my $rr ( 0 .. length($cod_name) )
{
my $ch = substr($cod_name,$rr,1);
( $ch =~ /\d/ ) ? $new_string.=$info[$ch] : 1 ;
( $ch =~ /\D/ ) ? $new_string.=$ch : 1 ;
}

geht aber vielleicht gehts besser...
renee
 2007-03-12 12:40
#74920 #74920
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal mehr Code...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
gamerzzz
 2007-03-12 13:14
#74921 #74921
User since
2007-03-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
so kann ich über $out = '2_1::0'; den Output auch ausserhalb der sub bestimmen:
Code: (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
use strict;
my $string = "testx_testy_testz";
my $in = "(testx)_(testy)_(testz)";

my $out = '2_1::0';

test("$string","$in","$out");

sub test
{
my $sub_string = shift;
my $sub_in = shift;
my $sub_out = shift;

print "$sub_string <=> $sub_in <=> $sub_out \n";

my @info = $sub_string =~ /$sub_in/;

my $new_string = "";
for my $rr ( 0 .. length($sub_out)-1 )
{
my $ch = substr($sub_out,$rr,1);
( $ch =~ /\d/ ) ? $new_string.=$info[$ch] : 1;
( $ch =~ /\D/ ) ? $new_string.=$ch : 1;

}


print "erg: $new_string \n";
}
\n\n

<!--EDIT|renee|1173698578-->
vayu
 2007-03-12 13:18
#74922 #74922
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
koooooooot texxx!!!
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-03-12 09:56.