sticky bit
13-12-2002, 13:07
Als penetranter Variablensparer versuch ich immer möglichst Funktionen direkt die Rückgabewerte von anderen Funktionen zu übergeben ohne irgendwas vorher ner Variablen zuzuweisen, ausser das ist unbedingt notwendig. Nun weiss ich wie ich einzele Werte ansprechen kann bei Funktionen die einen Array, einen Skalar, eine Referenz auf einen Skalar, eine Referenz auf einen Array oder eine Referenz auf einen Hash zurück geben, aber wie geht das bei Funktionen die einen Hash zurück geben?
(siehe Bsp. Code bei den kommentierten Fragezeichen. das was da steht geht übrigens nicht, auch wenns für mich logisch wäre auf die Handhabe mit Arrays bezogen...)
Jmd. hat mir schon ne Möglichkeit aufgezeigt wie man es machen kann in dem man das ganze vorher referenziert und gleich wieder dereferenziert (für den Bsp. Code wäre das dann print(${${\{&return_hash()}}}{'c'});), aber das kann ja ned gesund sein, deswegen wollt ich mal hier in die Runde fragen ob wer ne einfachere Möglichkeit kennt, gehe zwar eh dazu über fast nur noch mit Referenzen als Rückgabewerte zu arbeiten, aber interesehalber und einfach so halt, man weiss nie ob mans mal brauchen kann...
#!/usr/bin/perl
use strict;
print( &return_scalar() );
# Ausgabe 3
print( ${&return_scalar_reference()} );
# Ausgabe 3
print( (&return_array())[2] );
# Ausgabe 3
print( ${&return_array_reference()}[2] );
# Ausgabe 3
#print( (&return_hash()){'c'} ); # <--- ???
# Ausgabe 3
print( ${&return_hash_reference()}{'c'} );
# Ausgabe 3
# Gibt einen Skalar zurück
sub return_scalar
{
my $scalar = 3;
return($scalar);
}
# Gibt eine Referenz auf einen Skalar zurück
sub return_scalar_reference
{
my $scalar = 3;
return(\$scalar);
}
# Gibt einen Array zurück
sub return_array
{
my @array = (1, 2, 3);
return(@array);
}
# Gibt eine Referenz auf einen Array zurück
sub return_array_reference
{
my @array = (1, 2, 3);
return(\@array);
}
#Gibt einen Hash zurück
sub return_hash
{
my %hash = ('a', 1, 'b', 2, 'c', 3);
return(%hash);
}
#Gibt eine Referenz auf einen Hash zurück
sub return_hash_reference
{
my %hash = ('a', 1, 'b', 2, 'c', 3);
return(\%hash);
}
(siehe Bsp. Code bei den kommentierten Fragezeichen. das was da steht geht übrigens nicht, auch wenns für mich logisch wäre auf die Handhabe mit Arrays bezogen...)
Jmd. hat mir schon ne Möglichkeit aufgezeigt wie man es machen kann in dem man das ganze vorher referenziert und gleich wieder dereferenziert (für den Bsp. Code wäre das dann print(${${\{&return_hash()}}}{'c'});), aber das kann ja ned gesund sein, deswegen wollt ich mal hier in die Runde fragen ob wer ne einfachere Möglichkeit kennt, gehe zwar eh dazu über fast nur noch mit Referenzen als Rückgabewerte zu arbeiten, aber interesehalber und einfach so halt, man weiss nie ob mans mal brauchen kann...
#!/usr/bin/perl
use strict;
print( &return_scalar() );
# Ausgabe 3
print( ${&return_scalar_reference()} );
# Ausgabe 3
print( (&return_array())[2] );
# Ausgabe 3
print( ${&return_array_reference()}[2] );
# Ausgabe 3
#print( (&return_hash()){'c'} ); # <--- ???
# Ausgabe 3
print( ${&return_hash_reference()}{'c'} );
# Ausgabe 3
# Gibt einen Skalar zurück
sub return_scalar
{
my $scalar = 3;
return($scalar);
}
# Gibt eine Referenz auf einen Skalar zurück
sub return_scalar_reference
{
my $scalar = 3;
return(\$scalar);
}
# Gibt einen Array zurück
sub return_array
{
my @array = (1, 2, 3);
return(@array);
}
# Gibt eine Referenz auf einen Array zurück
sub return_array_reference
{
my @array = (1, 2, 3);
return(\@array);
}
#Gibt einen Hash zurück
sub return_hash
{
my %hash = ('a', 1, 'b', 2, 'c', 3);
return(%hash);
}
#Gibt eine Referenz auf einen Hash zurück
sub return_hash_reference
{
my %hash = ('a', 1, 'b', 2, 'c', 3);
return(\%hash);
}