Thread Schreibweise für GLOB
(4 answers)
Opened by rosti at 2018-11-24 12:55 2018-11-24T11:55:21 rosti Nun wird mir einiges klar. Die libnet hat einen Stil, der aus heutiger Sicht ein bisschen eigentümlich ist. Das liegt zum einen daran, dass der Code überwiegend vor langer Zeit entstanden ist und zum anderen daran, dass Handles immer noch "merkwürdige" Perl-Daten sind. Die lexikalische Variable $m ist eine Referenz auf einen anonymen Typeglob. Mit *$m bewirkt man eine De-Referenzierung, ich würde das nicht als "Glob auf Glob" interpretieren. *$m->{FOO} = 123; ist also ein Zugriff auf den Hash-Eintrag im Glob *$m. Man kann, wenn man Spaß dran hat, daneben auch noch den Skalaren und den Array-Slot verwenden: Zum Betrachten der Einträge eignet sich übrigens Data::Dump, der solche anonymen Typeglobs auflöst: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 use strict; use base qw(IO::Socket::INET); use Data::Dump qw(dump); my $host = 'smtp.mail.yahoo.com'; my $m = main->new(PeerAddr => "$host:25", Timeout => 1) or die $@; *$m->{FOO} = 123; # Glob auf Glob @{*$m} = qw(glib glob); *$m->[0] = 'glub'; ${*$m} = 'Scalar Ref'; dump $m; Ausgabe: Code: (dl
)
1 do { Es gehört sich allerdings nicht, auf diese Weise in fremden Objekten zu arbeiten, dabei kann auch mal was kaputtgehen. Im Gegensatz dazu erzeugt *m->{FOO} = 'foo'; einen Eintrag in der lokalen Symbol-Tabelle, man kann genauso %main::m = (FOO => 'foo') schreiben. Man spart sich ein paar Buchstaben, umschifft das use strict; - aber für gute Praxis halte ich das nicht. |