Schrift
[thread]8647[/thread]

array an subroutine übergeben

Leser: 4


<< >> 4 Einträge, 1 Seite
kale_1990
 2007-01-15 16:48
#73241 #73241
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
hallo hab folgenden code
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
@ids = (32,36,38,34,35);
@bg = trans_id_array(@ids,$varpar1,$varpar2);
sub psh_trans_id_array
{
 @ids = $_[0];
 $var1 = $_[1];
 $var2 = $_[2];
 foreach (@ids) {
   $idss .= ",".$_;
 }
}


ich bekommen hier immer einen fehler...ich vermute das hängt mit der übergabe des arrays zusammen ...hab schon ein wenig gelesen aber niht rausgefunden weswegen warum!!\n\n

<!--EDIT|kale_1990|1168872570-->
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
renee
 2007-01-15 16:58
#73242 #73242
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Entweder musst Du mit Prototypen arbeiten, oder - was ich eher empfehlen würde - mit Referenzen arbeiten.

Was in diesem Fall geht ist auch einfach die Rehenfolge der Übergabeparameter vertauschen. Perl kann nicht wissen, wo Dein Array anfängt und wo es aufhört. Deswegen landet im Moment alles in @ids (Du solltest übrigens mit Wiki:[tt]use strict[/tt] arbeiten und den Gültigkeitsbereich von Variablen einschränken).

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my @ids = (32,36,38,34,35);
my @bg = trans_id_array(\@ids,$varpar1,$varpar2);
sub psh_trans_id_array
{
my @ids = @{$_[0]}; # ersten Parameter dereferenzieren
my $var1 = $_[1];
my $var2 = $_[2];
my $idss = "";
foreach (@ids) {
$idss .= ",".$_;
}
}


Den Teil my $idss = ""; for... schreibst Du besser so:
Code: (dl )
my $idss = join(",",@ids)



Mehr zum lesen:

*) perlsub
*) perlreftut
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/
Taulmarill
 2007-01-15 16:58
#73243 #73243
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
du solltest das array als referenz übergeben. z.b. so
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
@ids = (32,36,38,34,35);
@bg = trans_id_array(\@ids,$varpar1,$varpar2);
sub psh_trans_id_array
{
@ids = @{$_[0]};
$var1 = $_[1];
$var2 = $_[2];
foreach (@ids) {
$idss .= ",".$_;
}
}


ausserdem ist es hilfreich, mit use strict; use warnings; zu arbeiten. vor allem, wenn man dabei ist was zu lernen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
kale_1990
 2007-01-15 17:02
#73244 #73244
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
ok danke...werde es so machen!!
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
<< >> 4 Einträge, 1 Seite



View all threads created 2007-01-15 16:48.