Perl :: Aufgabe #7
3 Lösungen

Übergabe von Array- Referenz an einer Subroutine
Anfänger - Perl
von Gustl
- 06.08.2012 um 23:06 Uhr
Erzeugen Sie eine Subroutine, die eine beliebige Zahl an Referenzen auf Arrays übernimmt, diese Arrays umkehrt und sie dann in der gleichen Reihenfolge, in der sie übernommen wurden, wieder zurückliefert.
Testen Sie die Subroutine mit einem Aufruf mit mindestens 4 Array-Referenzen.
Testen Sie die Subroutine mit einem Aufruf mit mindestens 4 Array-Referenzen.
Lösungen:

#!/usr/bin/perl use strict; use warnings; my @arr1 = ('1','2','3','4'); my @arr2 = ('a','b','c','d'); my @arr3 = ('I','II','III','IV'); my @arr4 = ('*','**','***','****'); print "1: @arr1\n2: @arr2\n3: @arr3\n4: @arr4\n\n\n"; test(\@arr1,\@arr2,\@arr3,\@arr4); print "1: @arr1\n2: @arr2\n3: @arr3\n4: @arr4\n"; sub test { for my $z (0..scalar @_-1) { @{$_[$z]} = reverse(@{$_[$z]}); } }

#!/usr/bin/perl use strict ; use warnings ; sub reverse_arrays { my @returned ; foreach my $arrayref ( @_ ) { @{$arrayref} = reverse @{$arrayref} ; push ( @returned , $arrayref ) ; } return @returned ; } my @cities = ( "Athen" , "Belgrad" , "Berlin" ) ; my @countries = ( "Griechenland" , "Serbien" , "Deutschland" ) ; my @numbers = 1..15 ; my @letters = 'a'..'f' ; my @reversed = reverse_arrays( \@cities , \@countries , \@numbers , \@letters ) ; foreach my $arrayref ( @reversed ) { map { print "$_\n" } @{$arrayref} ; }
Ich habe die übergebenen Referenzen geändert, ohne Rückgabe.
Perl-Code

#!/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); foreach(@array2){ print $_."\n" }; sub reverse_all_arrays{ @$_ = reverse @$_ for @_; }