Leser: 19
1
2
3
4
5
6
7
8
9
10
sub function()
{
my(*par,$any)=@_;
// hier, so schätze ich, werde ich wohl ein globales array deklarieren müssen
my(@arr)=();
// nun fülle ich @arr und setze den pointer *par drauf...so meinte ich
}
my $array
function(\$array,"any_text");
1 2 3 4 5 6 7 8 9 10 11
my $array = []; function($array); # alternativ my @array; function(\@array); sub function { my ($array) = @_; push @$array, 23; }
2010-11-26T15:04:51 reneeVielleicht erläuterst Du erstmal genauer, was Du genau machen möchtest. Dann lässt sich bestimmt einfacher helfen...
Guest Graf HerschelIch benötige das als Interface zwischen Perl und meinem inline_C
QuoteDeine Beispiele helfen nicht.
2010-11-26T16:16:59 pqGuest Graf HerschelIch benötige das als Interface zwischen Perl und meinem inline_C
wäre leicht hilfreich gewesen, das gleich am anfang zu erwähnen. ich hab mich schon gewundert, warum du von pointer und void in perl redest.
QuoteDeine Beispiele helfen nicht.
nuja, sie helfen dem, der das problem hat, dass ich annahm. sie zeigen, wie man einer sub eine referenz auf ein array übergibt.
deine frage "Wie gebe ich einen leeren array- oder hash pointer auf eine function, die dieses array dann füllt?" wird damit exakt beantwortet (ausser dass man halt in perl von referenxen redet).
1 2 3 4 5 6 7 8 9 10
sub function { my ($arref,$value) = @_; push @{$arref}, $value; } my @array; function( \@array, 'neuer wert' ); print $_,"\n" for @array;
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
#!/usr/bin/perl; use strict; use warnings; my $typles_ref1; if(function(\$typles_ref1,"array")) { print "ARRAY:\n"; print join(', ',@$typles_ref1)."\n"; } my $typles_ref2; if(function(\$typles_ref2,"hash")) { print "HASH:\n"; while(my($k,$v)=each(%$typles_ref2)) { print "$k = $v\n"; } } ###################################################### sub function { my($ref,$type)=@_; return 0 if($type ne 'array' and $type ne 'hash'); $$ref=[qw(var1 var2 var3)] if($type eq 'array'); $$ref={qw(key1 var1 key2 var2)} if($type eq 'hash'); return 1; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cs::xxx
push ds
push dx
push ax
push ds
push es
usw.
push dx ; dx stammt vom stack,beschrieben von perl
pop ds ; hier setzt er sich in das perl_daten_segment
call pqwmerge; hier ist dieses generalized quotes
*Adresse wird gemäß ds außerhalb deklariert
pop ds ; und wieder alles in Ordnung
retf