Thread Array - anonym oder benannt? (14 answers)
Opened by hugenyn at 2011-02-26 00:20

leo11
 2011-02-26 09:05
#146056 #146056
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
2011-02-26T07:07:42 bianca
Zum Beispiel zur Übergabe an eine Sub könnte man das verwenden. Dann wird nur eine Referenz zum Array übergeben und nicht das ganze Array. Eine Referenz braucht nach meinem Kenntnisstand weniger internen Arbeitsspeicher.

Ergänzend:
Wird eine sub aufgerufen wird @_ erstellt. Es enthält eine Liste aller Parameter.
Code: (dl )
1
2
3
4
5
perl -w -MData::Dumper -e 'sub abc{print Dumper \@_ }; abc(1,2)';
$VAR1 = [
1,
2
];

Bei der Erstellung von @_ macht es einen Unterschied in Performance und Speicherverbrauch ob nur eine Referenz kopiert werden muss, oder die komletten Daten. Des Weiteren kommt hinzu, dass man in der sub die Originaldaten manipulieren kann, sofern man eine Referenz übergibt. Möchte man sichergehen, das das nicht passiert, sollte man lieber auf einer Kopie der Daten arbeiten.

Intressant werden anonyme Arrays auch in komplexen Datenstrukturen oder anonymen subs. vielleicht findet sich hier im Wiki etwas dazu.

@all
Kann ich folgendes Bsp. so interpretieren, das bei der Erstellung von @_ eine deep copy gemacht wird?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
perl -w -MData::Dumper -e '@a=[1,2,{1=>{2=>"i"}}]; sub abc{print Dumper \@_ }; abc(@a)';
$VAR1 = [
[
1,
2,
{
'1' => {
'2' => 'i'
}
}
]
];

View full thread Array - anonym oder benannt?