Leser: 23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/perl -w use strict; use warnings; my @array1 = (1,2,3,4,5,6,7,8,9,10); my @array2 = (10,20,30,40,50,60,70,80,90,100); my @array3 = (100,200,300,400,500,600,700,800,900,1000); my @array4 = (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000); (@array1, @array2, @array3, @array4) = reverse_all_arrays(\@array1, \@array2, \@array3, \@array4); sub reverse_all_arrays{ my @array_refs = @_; my @arrays_back = (); foreach(@array_refs){ @ { $_ } = reverse(@ { $_ }); push(@arrays_back, @ { $_ }) } return # ? }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; my @array1 = (1,2,3,4,5,6,7,8,9,10); my @array2 = (10,20,30,40,50,60,70,80,90,100); my @array3 = (100,200,300,400,500,600,700,800,900,1000); my @array4 = (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000); reverse_all_arrays(\@array1, \@array2, \@array3, \@array4); sub reverse_all_arrays{ my @array_refs = @_; foreach(@array_refs){ @ { $_ } = reverse(@ { $_ }); } }
2013-06-25T15:29:47 GustlCode (perl): (dl )(@array1, @array2, @array3, @array4) = reverse_all_arrays(\@array1, \@array2, \@array3, \@array4);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use warnings; use strict; sub test { my @c = qw(a b c d); my @d = (1 .. 4); return (@c, @d); } my @a; my @b; (@a, @b) = &test(); foreach my $i (@a) { print "$i\n"; }
2013-06-25T20:34:19 hlubenowWenn Du das getrennt haben willst, mußt Du Referenzen auf die Arrays in der Funktion zurückgeben. Ebenso wie Du der Funktion Referenzen auf die Arrays übergeben hattest.
2013-06-25T20:34:19 hlubenowJetzt fragt sich nur noch, ob es möglich ist, Referenzen auf lokale Arrays aus einer Funktion zurückzugeben, auch wenn die Funktion dadurch beendet wird und die Arrays als lokale Variablen theoretisch gelöscht werden müßten. C würde bestimmt meckern, kann gut sein, daß Perl das macht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl -w use strict; use warnings; my @array1 = (1,2,3,4,5,6,7,8,9,10); my @array2 = (10,20,30,40,50,60,70,80,90,100); my @array3 = (100,200,300,400,500,600,700,800,900,1000); my @array4 = (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000); reverse_all_arrays(\@array1, \@array2, \@array3, \@array4); sub reverse_all_arrays{ @$_ = reverse(@$_) for(@_); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/perl -w use strict; use warnings; my @array1 = (1,2,3,4,5,6,7,8,9,10); my @array2 = (10,20,30,40,50,60,70,80,90,100); my @array3 = (100,200,300,400,500,600,700,800,900,1000); my @array4 = (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000); my ($array1_ref, $array2_ref, $array3_ref, $array4_ref) = reverse_all_arrays(\@array1, \@array2, \@array3, \@array4); @array1 = @$array1_ref; @array2 = @$array2_ref; @array3 = @$array3_ref; @array4 = @$array4_ref; sub reverse_all_arrays{ my @ret; push( @ret, [reverse(@$_)] ) for(@_); return @ret; }
2013-06-25T22:55:46 Raubtierverstehe ich nicht. kannst du das erläutern?
QuoteIst wohl Geschmackssache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
my @numbers = (1,2,3); my @names = qw(tine host fritz); if(wenden({names => \@names, numbers => \@numbers})){ print "Namen und Zahlen wurden gewendet, guckst Du:\n", Dumper \@names, \@numbers; } else{ die "Mist, das Wenden geht nicht!"; } sub wenden{ my $ref = shift; @{$ref->{names}} = reverse(@{$ref->{names}}); @{$ref->{numbers}} = reverse(@{$ref->{numbers}}); 1; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
my $main = bless{}, 'main'; # baue einen Rahmen... eval{ $main->foo()->bar(); # Method Chaining print Dumper $main; } || die $@; sub foo{ my $self = shift; $self->{FOO} = 1; $self; # geht return } # setze {BAR} nur wenn {FOO} vorhanden ist sub bar{ my $self = shift; die "Kein Attribut FOO vorhanden!" if not exists $self->{FOO}; $self->{BAR} = 4711; $self; # further chains... }
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
my $main = bless{ NAMES => [qw(Tine Horst Fritz)], NUMBERS => [1,2,3], }, 'main'; # baue einen Rahmen... eval{ $main->ifnames()->ifnumbers()->wenden(); # Method Chaining print Dumper $main; } || die $@; sub wenden{ my $self = shift; my $r = shift; @{$self->{NAMES}} = reverse @{$self->{NAMES}}; @{$self->{NUMBERS}} = reverse @{$self->{NUMBERS}}; } sub ifnames{ my $self = shift; die "Kein Attribut Namen!" unless exists $self->{NAMES}; die "Kein Array Names!" if ref $self->{NAMES} ne 'ARRAY'; die "Keine Namen in der Liste!" unless scalar @{$self->{NAMES}}; $self; # geht return } sub ifnumbers{ my $self = shift; die "Kein Attribut Numbers!" unless exists $self->{NUMBERS}; die "Kein Array Numbers!" if ref $self->{NUMBERS} ne 'ARRAY'; die "Keine Zahlen in der Liste!" unless scalar @{$self->{NUMBERS}}; $self; # geht return }
2013-06-26T08:54:04 rostiExceptions machen das Leben leichter
1 2 3 4 5 6
if (success my ($vorname, $nachname) = lade_kunden($id)) { say "Hallo $vorname"; } else { say "Kunde $id nicht vorhanden"; }
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
#!/usr/bin/perl use strict; use warnings; use Error qw(:try); use Data::Dumper; my $main = bless{}, 'main'; my $names = [qw(Tine Horst Fritz)]; try{ $main->setNames($names)->addName('Rolf')->addName('Tobias')->revNames(); print "Names: @$names\n"; } catch Error::Simple with{ my $E = shift; print Dumper $E; }; exit 0; ########################################################################### sub revNames{ my $self = shift; my $r = shift; @{$self->{NAMES}} = reverse @{$self->{NAMES}}; } sub addName{ my $self = shift; my $name = shift or throw Error::Simple("Kein Name übergeben!"); push @{$self->{NAMES}}, $name; return $self; } sub setNames{ my $self = shift; my $r = shift; throw Error::Simple("Kein Array ...") unless ref $r eq 'ARRAY'; $self->{NAMES} = $r; return $self; }
2013-06-26T06:36:13 rosti2013-06-25T22:55:46 Raubtierverstehe ich nicht. kannst du das erläutern?
Na klar, gerne ;)
Wenn ich Referenzen in eine sub gebe, habe ich diese Referenzen (bzw. die Arrays) bereits außerhalb der sub in Verwendung. Ergo ist es nicht notwendig, diese Referenzen aus der sub heraus wieder zurückzugeben (die Referenzen habe ich bereits oder ich kann mir diese jederzeit neu erzeugen).
2013-06-25T22:54:43 Raubtierdie Lösung von "progdoc"
2013-06-26T03:58:43 bianca2013-06-25T22:54:43 Raubtierdie Lösung von "progdoc"
Wer oder was ist das?